我有一个需要遍历每个项目的循环。因此,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结构是最好的解决方案。
答案 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