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

时间:2015-02-11 19:32:11

标签: php arrays foreach iteration dynamic-arrays

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

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

我想要打印“abcde”,但出于上述原因,它只打印“abcd”。我查看了array_maparray_walk以及其他人但未找到解决方案。

2 个答案:

答案 0 :(得分: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++;
}

答案 1 :(得分:4)

使用while的另一种变体,无需计算。还可以使用关联数组,并在需要时检索$k中的键:

while(list($k, $i) = each($items)) {
  echo $i;
  if ($i === 'c') {
    $items[] = 'e';
  }
}

或使用for循环,但这会停留在包含布尔false或评估为false的任何元素:

for($i = reset($items) ; $i ; $i = next($items)) {