如何更改我的数组,这直接影响我的foreach循环?

时间:2015-09-01 13:01:07

标签: php arrays foreach reference

我使用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

1 个答案:

答案 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)