我该如何在php中实现这个功能?有些情况下,我需要将更多的元素推入正在循环遍历的数组中,以便它们也被遍历:
$j = array(1,2,3);
foreach ($j as $i)
{
echo $i . "\n";
if ($i <= 3)
array_push($j, 5);
}
应该打印出123555,但它在123停止了。
在php中有没有解决这个问题的办法?
foreach
在某些情况下是在原数组的副本上操作,而不是原始数组。这就是为什么你在循环中看不到变化的原因。
当你通过引用循环时,就会得到预期的输出:
foreach ($j as &$i)
{
// ...
}
Output:
1 2 3 5 5 5
添加&
以传递引用。默认会传递一个值($j
的副本)。
$j = array(1,2,3);
foreach ($j as $i=>&$v)
{
echo "$i=>$v\n";
if ($i <= 3)
array_push($j, 5);
}
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);
}
}
为什么不尝试使用 while:
$i = 0;
$j = array( 1, 2, 3 );
while ( count( $j ) )
{
echo array_shift( $j );
if ( $i++ <= 3 )
{
array_push( $j, 5 );
}
}