在PHP中删除foreach循环中的项

时间:2012-01-21 17:51:32

标签: php arrays foreach reference unset

我有一个foreach循环,如果满足某些条件,我想从数组中取消设置项目,如下所示:

foreach ($array as $element) {
    if (conditions) {
        unset($element);
    }
}

但之后的元素并没有被取消。我究竟做错了什么?我是否取消了对实际元素或类似内容的引用?

2 个答案:

答案 0 :(得分:8)

简单解决方案,通过它的索引取消设置元素:

foreach ($array as $key => $element) {
    if (conditions) {
        unset($array[$key]);
    }
}

只是取消设置$element将不起作用,因为此变量不是对数组元素的引用,而是副本。因此,更改$element的值也不会更改数组。

答案 1 :(得分:0)

另一种方法是,您可以通过执行以下操作将数组元素传递给循环:

foreach($array as &$var) {
    unset($var);
}

这很有用,因为您可以根据需要直接访问数组元素以进行更改或删除,而无需构建新数组或按键访问。您对$ var所做的任何更改都会影响$ array的内容。