Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在数组中循环时向数组中添加项?_Php_Arrays_Loops_Foreach - Fatal编程技术网

Php 如何在数组中循环时向数组中添加项?

Php 如何在数组中循环时向数组中添加项?,php,arrays,loops,foreach,Php,Arrays,Loops,Foreach,在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; } 仅打印出:12345678910本着的精神,这是我找到的最好的解决方法:将其转换为while循环 $a = array (1,2,3,4,5,6

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;
    }
仅打印出:
12345678910
本着的精神,这是我找到的最好的解决方法:将其转换为
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++;
    }
$a=数组(1,2,3,4,5,6,7,8,9,10);
$i=0;
而($i

它没有正确地发出
1234567891011

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

$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

一个简单的方法是创建第二个数组,该数组将保留旧数组,并且在循环时可以在其中添加新值


在循环结束时,新数组将具有旧数组+新插入值。甚至不知道ArrayIterator的存在。谢谢,唯一的问题可能是每次循环运行时都会执行count($a),这可能会影响性能。不过我不太确定foreach是如何处理这个问题的。你可以使用for
for($I=0;$I
@AlexanderVarwijk使while更紧凑。整个前提是$a的大小随时都可能改变,所以在每次迭代中对其进行计数是找到答案的唯一方法