在foreach循环中取消设置数组元素

时间:2010-06-16 15:44:50

标签: php arrays reference foreach unset

我在foreach循环中通过引用访问数组,但unset()函数似乎不起作用:

foreach ( $this->result['list'] as &$row ) {
    if ($this_row_is_boring) {
        unset($row);
    }
}

print_r($this->result['list']); // Includes rows I thought I unset

想法?谢谢!

3 个答案:

答案 0 :(得分:32)

您正在取消参考(打破参考)。您需要根据密钥取消设置:

foreach ($this->result['list'] as $key => &$row) {
    if ($this_row_is_boring) {
        unset($this->result['list'][$key]);
    }
}

答案 1 :(得分:7)

foreach ($this->result['list'] as $key => &$row) {
    if ($this_row_is_boring) {
        unset($this->result['list'][$key]);
    }
}
unset($row);

请记住:如果您使用带引用的foreach,则应使用取消引用取消引用,以便foreach不会复制下一个引用。 More info

答案 2 :(得分:4)

对上述答案的一些解释。

unset($row)后,变量$row未设置。这并不意味着$row中的数据已被删除;该列表还有一个指向$row的元素。

将变量视为标签会有所帮助。一段数据可以包含一个或多个标签,unset会删除该标签,但不会触及实际数据。如果删除所有标签,则会自动删除数据。