我怎样才能在PHP中实现这一目标?在某些情况下,我需要将更多元素推送到我正在循环的数组中,以便它们也可以循环通过:
$j = array(1,2,3);
foreach ($j as $i)
{
echo $i . "\n";
if ($i <= 3)
array_push($j, 5);
}
应打印123555,但会在123处停止。
有没有办法解决这个问题?
答案 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 );
}
}