我通过引用访问foreach循环内的阵列内的阵列元素,但是未设定()函数似乎并不奏效:取消设置foreach循环
foreach ($this->result['list'] as &$row) {
if ($this_row_is_boring) {
unset($row);
}
}
print_r($this->result['list']); // Includes rows I thought I unset
想法?谢谢!
我通过引用访问foreach循环内的阵列内的阵列元素,但是未设定()函数似乎并不奏效:取消设置foreach循环
foreach ($this->result['list'] as &$row) {
if ($this_row_is_boring) {
unset($row);
}
}
print_r($this->result['list']); // Includes rows I thought I unset
想法?谢谢!
你没有设置参考(打破参考)。你需要取消设置基于键:
foreach ($this->result['list'] as $key => &$row) {
if ($this_row_is_boring) {
unset($this->result['list'][$key]);
}
}
foreach ($this->result['list'] as $key => &$row) {
if ($this_row_is_boring) {
unset($this->result['list'][$key]);
}
}
unset($row);
记住:如果您使用的是foreach
与参考,你应该使用未设置取消引用,这样foreach
不上复制下一个它的顶部。 More info
上面的答案有点解释。
经过unset($row)
变量$row
未设置。这并不意味着$row
中的数据被删除;该列表还有一个指向$row
的元素。
它有助于将变量看作标签。一段数据可以有一个或多个标签,并且unset
删除该标签但不会触及实际数据。如果所有标签都被删除,则数据会自动删除。
值得注意的是,即使您在初始化数组时未指定它们(自动数字索引),也会保留数组索引。也就是说,它不会将数字数组键重新组织为顺序。 – amphetamachine 2010-06-16 15:55:31