9

foreach循环中,PHP 似乎在一开始就读取了整个数组,因此如果您突然需要将新项目附加到数组中,它们将不会被循环处理:

$a = array (1,2,3,4,5,6,7,8,9,10);

foreach ($a as $b)
    {
        echo " $b ";
        if ($b ==5) $a[] = 11;
    }

只打印出来: 1 2 3 4 5 6 7 8 9 10

4

3 回答 3

20

只需创建您正在循环的数组的参考副本

$a = array(1,2,3,4,5,6,7,8,9,10);
$t = &$a; //Copy
foreach ( $t as $b ) {
    echo " $b ";
    if ($b == 5)
        $t[] = 11;
}

或者只是使用ArrayIterator

$a = new ArrayIterator(array(1,2,3,4,5,6,7,8,9,10));
foreach ( $a as $b ) {
    echo "$b ";
    if ($b == 5)
        $a->append(11);
}

输出

 1 2 3 4 5 6 7 8 9 10 11

观看现场演示

于 2012-11-04T00:05:17.613 回答
1

本着its-ok-to-ask-and-answer-your-own-questions的精神,这是我发现的最佳解决方法:将其转换为while循环。

$a = array (1,2,3,4,5,6,7,8,9,10);
$i = 0;
while ($i < count($a))
    {
        $b =  $a[$i];
        echo " $b ";
        if ($b ==5) $a[] = 11;
        $i++;
    }

不是它正确地发出 1 2 3 4 5 6 7 8 9 10 11

于 2012-11-03T23:57:58.193 回答
0

一个简单的方法是创建第二个数组,它将保留旧数组,并且在循环时您可以在那里添加新值。

在循环结束时,新数组将包含旧数组 + 新插入的值

于 2018-10-29T14:00:53.970 回答