在 PHP 中的 for 循环中将元素添加到数组

4

我该如何在php中实现这个功能?有些情况下,我需要将更多的元素推入正在循环遍历的数组中,以便它们也被遍历:

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

应该打印出123555,但它在123停止了。

在php中有没有解决这个问题的办法?

4个回答

4

foreach在某些情况下是在原数组的副本上操作,而不是原始数组。这就是为什么你在循环中看不到变化的原因。

当你通过引用循环时,就会得到预期的输出:

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

Output:

1
2
3
5
5
5

3

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

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

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);
    }

}

1

为什么不尝试使用 while:

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接