【问题标题】:Removing a key from a nested array in php从 php 中的嵌套数组中删除一个键
【发布时间】:2021-07-23 02:26:45
【问题描述】:

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

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

代码将返回一个嵌套的结果数组,但它包含表 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']);
}

这根本没有任何作用。

我知道问题出在循环中,因为如果我设置一个具有相同数据的数组并且我 unset['id'] 然后它会删除 id。

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

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

【问题讨论】:

    标签: php arrays mysqli


    【解决方案1】:

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

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

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

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

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

    相反,根本不要从数据库中获取id 列。

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

    这将防止您首先循环遍历所有结果。

    【讨论】:

    • 同意我知道我应该将其放入查询中,但我希望根据变化的表格显示的内容是动态的。但这很有效,非常感谢。
    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    相关资源
    最近更新 更多