关于在数组上使用 foreach
时操作数组的安全隐患,存在许多问题。不过,我找不到关于在 while 循环中执行此操作的任何问题。
所以我想知道,这样做安全吗?下面是 PHP 中的示例脚本,我不确定这是否合适。
while ($item = array_pop($array)) {
findMoreItems($item, $array);
}
function findMoreItems($item, &$array) {
// Returns null if no more items are found
$newItem = someFuncFromServer($item);
if ($newItem) {
array_push($array, $newItem);
}
}
安全的意思是:我能确定循环中没有跳过任何项目吗?
最佳答案
您的代码本质上等同于:
$item = array_pop($array);
while ($item) {
findMoreItems($item, $array);
$item = array_pop($array)
}
function findMoreItems($item, &$array) {
// Returns null if no more items are found
$newItem = someFuncFromServer($item);
if ($newItem) {
array_push($array, $newItem);
}
}
现在,如果您以上述方式重写它,很明显代码不会执行任何类似复制引用或数组点或类似 foreach
所做的事情。 foreach
之所以这样做,是因为它依赖于内部数组指针,而 array_pop
和 array_push
则没有。
关于php - 在 while 循环中附加到数组是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40306714/