【发布时间】:2013-05-13 15:17:42
【问题描述】:
遇到了一个小障碍,想知道是否有“最佳实践”方式来解决它。
所以我刚刚了解到“无论如何,一个 php foreach 将在整个数组上执行。测试取消设置迭代中的下一个值。它将在偏移量上进行迭代,但该值将为空。——Kevin Peno 12 月 22 日' 09 点 21:31" 来自How do you remove an array element in a foreach loop?
这是让我感到困惑的第一部分。我正在使用 foreach 遍历一个数组。这是一个搜索功能,所以我要删除我刚刚搜索的元素,所以当循环再次运行时,它会减去那个元素。
如果可能的话,我不想重新索引,但如果必须的话,我可以。
Array
(
[0] => Array
(
[0] => a
[1] => aa
[2] => aaa
)
[1] => Array
(
[0] => b
[1] => bb
[2] => bbb
)
[2] => Array
(
[0] => c
[1] => cc
[2] => ccc
)
[3] => Array
(
[0] => d
[1] => dd
[2] => ddd
)
)
foreach($array as $key=>$value) {
$searchresult[] = search function returns various other keys from array
foreach($searchresult as $deletionid) {
unset($array[$deletionid]);
}
}
所以在第一次迭代中,它显然使用了 $array[0],但 $searchresults 可能会返回 4,5,6,7。所以这些键从 $array 中删除。
然而,foreach 循环仍然遍历这些并给我返回一堆空数组。
我确实读过How does PHP 'foreach' actually work? 并且得到了一些。
谢谢
【问题讨论】:
-
您可以在使用 if 子句进行迭代时删除您想要的项目
-
@Fabio 怎么样?我刚刚添加了一个 if(empty($array)) 语句,并且至少摆脱了所有空数组。我想我更感兴趣的是让它不迭代那些,因为它们没有设置。或者这只是一种怪癖。
-
第一阶段需要删除什么?