当对数组使用foreach时,有很多关于操作数组的安全性的问题。不过,在一段时间的循环中,我找不到任何关于做这件事的问题。
所以我想知道,这样做安全吗?下面是一个用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_poparray_push不依赖于内部数组指针。

10-05 23:03