我想有一个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)
您需要做的是在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)
注意,这将导致无限循环(白色将在每个循环中添加到数组的末尾).