从 php 中的嵌套数组中删除键

Removing a key from a nested array in php

我正在尝试显示从 mysql 数据库中获取的信息,但我不想在结果中显示 'id' 字段。我把显示部分放下就好了。只需要从视图中删除一个字段。

$plantarray = array();
if($result = $mysqli->query($hoyaquery)){
    if(mysqli_num_rows($result) > 0){
        while($row = mysqli_fetch_assoc($result)){
            $plantarray[] = $row;
        }
    } 
}

该代码将 return 一个嵌套的结果数组,但它包含表 ID 字段。

然后显示使用:

<?php if (count($plantarray) > 0): ?>
<table>
  <thead>
    <tr>
      <th><?php echo implode('</th><th>', array_keys(current($plantarray))); ?></th>
    </tr>
  </thead>
  <tbody>
<?php foreach ($plantarray as $row): array_map('htmlentities', $row); ?>
    <tr>
      <td><?php echo implode('</td><td>', $row); ?></td>
    </tr>
<?php endforeach; ?>
  </tbody>
</table>
<?php endif; ?>

我试图循环遍历外部数组并以键为目标 'id' 但如果我取消设置 id,它根本不会做任何事情。

foreach($plantarray as $key){
  unset($key['id']);
}

这根本没有任何作用。

我知道问题出在循环中,因为如果我用相同的数据设置一个数组并取消设置['id'],那么它会删除 id。

$p = [ "id" => 3, "Family" => "Apocynaceae", "Genus" => "Hoya", "Species" => "curt" ];
unset($p["id"]);
print_r($p);

我可能完全错了。我不确定。我不确定哪里出了问题。

你的循环不起作用的原因是你没有取消设置数组本身的值,而是在 foreach 循环期间生成的“副本”中。如果您想使用此解决方案,那么正确的代码如下所示:

foreach($plantarray as &$key){
  unset($key['id']);
}

& 符号将通过引用传递行,这将使您的操作保留在原始数组中。

也就是说,这不是执行此操作的高效方法。从表面上看,您在这段代码上方的某处有一个查询,看起来像

$hoyaquery = "SELECT * FROM plant-table-name";

相反,完全不从数据库中获取 id 列。

$hoyaquery = "SELECT Family, Genus, Species FROM plant-table-name"

这将使您无需首先循环遍历所有结果。