在PHP 8中,foreach()函数的功能也发生了变化。
1.对内部指针失效
在PHP 8中,foreach()循环对数组内部指针不再起作用。
【例6.22】
<?php
$array = [0, 1, 2];
foreach ($array as &$val)
{
var_dump(current($array));
}
?>
在PHP 8中运行,结果会打印三次int(0),也就是说数组的内部指针并没有改变。运行结果如图6-28所示。
在PHP 5中运行,结果会显示int 1、int 2和boolean false。运行结果如图6-29所示。
2.按照值进行循环时,修改数组不再影响循环行为
在PHP 8中,foreach()按照值进行循环的时候,foreach是对该数组的一个复制进行操作。这样在循环过程中对数组做的修改是不会影响循环行为的。
【例6.23】
<?php
$array = [100,200,300];
$ref =& $array;
foreach ($array as $val) {
unset($array[1]);
echo "数组值: " . $val . "<br/>";
}
?>
在PHP 8中,上面的代码虽然在循环中把数组的第2个元素销毁掉了,还是会把数组的3个元素全部打印出来。结果如图6-30所示。
在PHP 5中,上面的代码只会把2个元素打印出来(100、300)。结果如图6-31所示。