我在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
想法?谢谢!
答案 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
会删除该标签,但不会触及实际数据。如果删除所有标签,则会自动删除数据。