如何在迭代中增长的数组中迭代*all*值?

Ode*_*ard -2 php arrays iteration foreach dynamic-arrays

下面的例子不起作用,因为foreach在数组的副本上工作,但它在概念上显示了我想要实现的目标.

$items = array('a', 'b', 'c', 'd');
foreach ($items as $i) {
  echo $i;
  if ($i === 'c') {
    $items[] = 'e';
  }
}
Run Code Online (Sandbox Code Playgroud)

我想要打印' abcde',但由于上述原因,它只打印' abcd'.我看过了array_map,array_walk其他人却没有找到解决方案.

Gol*_*rol 5

您可以使用while循环(或者也可能是正常for循环),它在每次迭代后评估退出条件.请注意,在此代码中,$i已更改为索引,因此您可以使用$items[$i]获取实际字符.

$items = array('a', 'b', 'c', 'd');
$i = 0;
while ($i < count($items)) {
  echo $items[$i];
  if ($items[$i] === 'c') {
    $items[] = 'e';
  }
  $i++;
}
Run Code Online (Sandbox Code Playgroud)