17

我在 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

想法?谢谢!

4

3 回答 3

33

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

foreach ($this->result['list'] as $key => &$row) {
    if ($this_row_is_boring) {
        unset($this->result['list'][$key]);
    }
}
于 2010-06-16T15:47:25.607 回答
8
foreach ($this->result['list'] as $key => &$row) {
    if ($this_row_is_boring) {
        unset($this->result['list'][$key]);
    }
}
unset($row);

请记住:如果您使用 foreach带有引用的 a,则应使用 unset 取消引用,这样foreach就不会在其上复制下一个。更多信息

于 2010-06-16T15:52:28.047 回答
5

对上面的答案做一点解释。

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

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

于 2010-06-16T16:06:14.720 回答