我使用foreach循环遍历我拥有的数组。但是在foreach循环中我需要修改数组,以便它直接影响我的foreach循环。
所以我将举例说明我的问题:
<?php
$array = ["Red", "Yellow", "Blue", "Orange"];
foreach($array as $color) {
if(($key = array_search("Blue", $array)) !== false)
unset($array[$key]);
echo $color . "<br>";
}
?>
输出:
Red Yellow Blue Orange
因为你可以看到我unset()
数组元素的值为Blue
。但我的输出中仍然有它。
现在我的问题是:如何使用值Blue
取消设置元素,以便直接影响我的foreach循环,这意味着我将不再在输出中看到它,因为我在之前删除了它我遍历那个特定的元素。
预期输出为(注意:蓝色不在输出中):
Red
Yellow
Orange
答案 0 :(得分:3)
您可以通过引用另一个变量来分配数组,这样is_ref
为1,意味着foreach循环不再循环遍历数组的副本。
所以只需将它放在foreach循环之前:
$arr = &$array;
有关foreach 实际的详细信息,请参阅:How does PHP 'foreach' actually work?
另请注意,由于PHP 7中有一些更改:http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.foreach这在PHP 7中不再有效。
如果你想在改变行为的PHP 7中做同样的事情,只要说你想通过引用遍历数组,例如
foreach($array as &$color)