动态添加到当前foreach数组

时间:2013-06-19 23:18:27

标签: php foreach

我有一个需要遍历每个项目的循环。因此,foreach循环似乎是最好的主意。但是,我需要在迭代时向数组添加一个元素。我试了以下没有任何运气。

foreach ($allitems as $item) {
    //Do some stuff here

    if ($value === true)
        $allitems[] = 'New item';
}

我发现foreach循环似乎使用了数组的引用副本,因此编辑数组不会在循环中注册。

解决方法是使用较旧的样式化while循环,如下所示:

while (list($key, $item) = each($allitems)) {
    //Do some stuff here

    if ($value === true)
        $allitems[] = 'New item';
}

显然,foreach循环会更好,更有效。可能吗?或者while结构是最好的解决方案。

3 个答案:

答案 0 :(得分:2)

是的,有可能:

foreach ($allitems as &$item) {
    //Do some stuff here

    if ($value === true)
        $allitems[] = 'New item';
}

根据docs,你需要传递一个引用(如果$ item使用前面的&

更具体的例子:

<?php
$allitems = array(1,2,3,4);

foreach ($allitems as &$item) {
     echo $item."\n";
     if ($item == 2) {
          $allitems[] = "Blah";
     }
}
?>

此输出(使用命令行中的php)

1
2
3
4
Blah

答案 1 :(得分:1)

看起来普通的for循环最适合这个:

for ($i = 0; $i < count($array); $i++) {
  // Do some stuff here that calculates $value from $array[$i]
  if ($value === true) {
    $array[] = "New Element";
  }
}

答案 2 :(得分:0)

你可以做到这样......就像这样....

但是它增加了更多的代码...所以它不比你的while循环更好..

foreach($array as $val){
  if($val=="check"){$append[]="New Item";}
}
$array = array_merge($array, $append);

当然,如果你想保持你的结构......那么请使用array_push