在php中的for循环中将元素推送到数组

时间:2011-12-29 17:10:23

标签: php arrays

我怎样才能在PHP中实现这一目标?在某些情况下,我需要将更多元素推送到我正在循环的数组中,以便它们也可以循环通过:

$j = array(1,2,3);
foreach ($j as $i)
{
    echo $i . "\n";
    if ($i <= 3)
        array_push($j, 5);
}

应打印123555,但会在123处停止。

有没有办法解决这个问题?

4 个答案:

答案 0 :(得分:3)

foreach适用于数组的副本,而不是原始数组(在某些条件下)。这就是为什么你没有看到循环中反映的变化。

当您按引用循环时,您将获得预期的输出:

foreach ($j as &$i)
{
   // ...
}

输出:

1
2
3
5
5
5

答案 1 :(得分:2)

添加&以传递引用。默认值是一个值($j的副本)。

$j = array(1,2,3);
foreach ($j as $i=>&$v)
{
    echo "$i=>$v\n";
    if ($i <= 3)
        array_push($j, 5);
}

答案 2 :(得分:2)

PHP不支持此功能。从手册:

由于foreach依赖于内部数组指针,因此在循环中更改它可能会导致意外行为。

http://php.net/manual/en/control-structures.foreach.php

但是,这段代码可以使用,虽然我不会依赖于手册所说的内容。

<?
header( 'content-type: text/plain' );

$j = array(1,2,3);

foreach ($j as &$v )
{
    echo "$v\n";
    if ($v <= 3)
    {
        array_push($j, 5);
    }

}

答案 3 :(得分:1)

你为什么不尝试:

$i  = 0;
$j  = array( 1, 2, 3 );

while ( count( $j ) )
{
    echo array_shift( $j );

    if ( $i++ <= 3 )
    {
        array_push( $j, 5 );
    }
}