从 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"
这将使您无需首先循环遍历所有结果。
我正在尝试显示从 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"
这将使您无需首先循环遍历所有结果。