0

当我使用 PHP 操作数组时,我遇到了问题!

这是如何运作的?

我想知道为什么!

我发现如果我不使用'unset',这段代码可以工作!我谷歌,但没有得到答案!所以我问!

当我在 PHP 中使用引用传递时,它失败了!

谢谢!

<?php

$arr = array('a','b','c','d',array(1,2,3,4,5));

var_dump($arr);
foreach($arr as &$value){
    if($value == 'c'){
        unset($value);
    }
    if(is_array($value)){
        foreach ($value as $key => &$v) {
            if($v == 2){
                unset($v);
            }
        }
    }
}
var_dump($arr);

?>

这是结果:

array (size=5)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string 'd' (length=1)
  4 => 
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => int 5
array (size=5)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string 'd' (length=1)
  4 => &
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => &int 5
4

1 回答 1

4

如果你想从你正在迭代的数组中删除一个项目 - 你需要unset数组的键,而不是它的值:

foreach($arr as $key => $value){
    if (...) {
        unset($arr[$key]);
    }
}

您当前的解决方案无法按预期工作,因为&$value在任何特定迭代中都是对存储在$arr. 因此,您要取消设置局部变量,而不是原始变量。

于 2013-03-12T00:48:32.337 回答