更改foreach循环内的初始数组?

ajs*_*sie 30 php

我想有一个foreach循环,其中初始数组在循环内更改.

例如.

$array = array('red', 'blue');
foreach($array as $key => $value) {
    $array[] = 'white';
    echo $value . '<br />';
}
Run Code Online (Sandbox Code Playgroud)

在这个循环中,循环将打印出红色和蓝色,尽管我在循环内添加了另一个元素.

是否有任何方法可以更改循环内的初始数组,以便添加新元素,并且foreach将使用新数组进行更改?

我需要这种逻辑来完成一项特定的任务:

我将有一个if语句搜索链接.如果该链接存在,则将其添加到数组中.如果链接内容包含另一个链接,则将提取该链接内容以进行检查.如果是这样,则添加此链接,并且将获取内容,依此类推......当没有进一步建立链接时,foreach循环将退出

Pas*_*TIN 45

我不认为foreach循环是可能的,至少你写它的方式:似乎不是那样foreach有效; 引用手册页foreach:

注意:除非引用了数组,否则foreach将对指定数组的副本进行操作,而不是数组本身.


编辑:在考虑了一下这个说明后,它实际上是可能的,这是解决方案:

注释说" 除非引用数组 "; 这意味着这部分代码应该工作:

$i = 0;
$array = array('red', 'blue');
foreach($array as $key => & $value) {
    $array[] = 'white';
    echo $value . '<br />';
    if ($i++ >= 5) {
        break;   // security measure to ensure non-endless loop
    }
}
Run Code Online (Sandbox Code Playgroud)

注意&之前$value.

它实际上显示:

red
blue
white
white
white
white
Run Code Online (Sandbox Code Playgroud)

这意味着添加&实际上是您正在寻找的解决方案,从foreach循环内部修改数组;-)


编辑:这是我在考虑这个说明之前提出的解决方案:

你可以使用一个while循环,"手工"做更多的工作; 例如 :

$i = 0;

$array = array('red', 'blue');

$value = reset($array);
while ($value) {
    $array[] = 'white';
    echo $value . '<br />';
    if ($i++ >= 5) {
        break;   // security measure to ensure non-endless loop
    }
    $value = next($array);
}
Run Code Online (Sandbox Code Playgroud)

会得到这个输出:

red
blue
white
white
white
white
Run Code Online (Sandbox Code Playgroud)

  • 别忘了取消($ value); 但是,在你离开foreach之后 - 否则下次你在另一个foreach循环中使用$ value时,你可能会得到一些奇怪的行为. (3认同)

MrV*_*dez 8

您需要做的是在for循环中移动赋值并在每次迭代时检查数组的长度.

$array = array('red', 'blue');
for($i = 0; $i < count($array); $i++)
{
   $value = $array[$i];
   array_push($array, 'white');
   echo $value . '<br />';
}
Run Code Online (Sandbox Code Playgroud)

注意,这将导致无限循环(白色将在每个循环中添加到数组的末尾).