Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在while循环中追加到数组是否安全?_Php_Arrays - Fatal编程技术网

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
中的任何错误都可能导致这成为一个无限循环。