php - 在 while 循环中附加到数组是否安全?

标签 php arrays

关于在数组上使用 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_poparray_push 则没有。

关于php - 在 while 循环中附加到数组是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40306714/

相关文章:

php - Mysql唯一行对不同列具有适当的计数

php - Laravel - 编辑和更新页面

php - 如果 mysql 查询为空或不存在?

javascript - 如何将字符串拆分为 n 个字符的段?

java - 从字符串数组中解析 int 时出现 ArrayIndexOutOfBound

php - 使用 PHP 操作联结表

php - 将 curdate 插入数据库时​​出现问题

c# - 我可以通过 C++/CLI 包装器将 C# 数组传递给 C 指针吗?

ios - 解析`objectSaveInBackground`,全部保存或全部保存

将字符映射表从主机内存复制到 CUDA 中的设备