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

Sum*_*mer 16 php arrays foreach reference 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
Run Code Online (Sandbox Code Playgroud)

想法?谢谢!

irc*_*ell 32

你没有设置引用(打破引用).您需要根据键取消设置:

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

  • 值得注意的是,即使在初始化数组时未指定数组索引(自动数字索引),也会保留数组索引.也就是说,它不会重新组织数字数组键是顺序的. (5认同)

Cri*_*ian 7

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

请记住:如果您使用 foreach带引用的a,则应使用unset取消引用,以便foreach不会复制下一个引用.更多信息


ext*_*eon 5

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

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

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