Php 在while循环中追加到数组是否安全?
在对数组使用Php 在while循环中追加到数组是否安全?,php,arrays,Php,Arrays,在对数组使用foreach时,操作数组的安全性有很多问题。不过,我在while循环中找不到任何关于这样做的问题 所以我想知道,这样做安全吗?下面是一个PHP脚本示例,我不确定这是否正确 while ($item = array_pop($array)) { findMoreItems($item, $array); } function findMoreItems($item, &$array) { // Returns null if no more items are fo
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\u pop
和array\u push
则不依赖内部数组指针。就像无限循环一样安全。令人惊讶的是,这个问题比它看起来更深入。我可以解释,但我可能解释得不够好。首先,请参见。这并不复杂,但很难正确解释。和@apokryfos这不是一个无限循环。这是一个“潜在的”无限循环。我编辑了显而易见的,所以不:考虑到我正在处理的数据,没有无限循环。使用$array[]=$newItem代码>它比array\u push快毕竟我想不出怎么会出问题。你关于foreach的回答是正确的。从理性上讲,这是完全安全的。然而,用大量数据进行一些实际测试,看看是否会发生错误,这将是一件有趣的事情——只是为了确定PHP是否会出现意外行为。我认为更大的风险是someFuncFromServer
中的任何错误都可能导致这成为一个无限循环。