使用引用删除数组元素的最佳方法是什么

时间:2013-05-28 15:59:38

标签: php reference foreach

假设我正在为数组使用foreach循环,并且值是每个元素的引用,我想删除一个元素,我该怎么做呢?

$array = array("1" => "PHP code tester Sandbox Online",  
              "foo" => "bar",
              6,
              5 => 89009, 
              "case" => "Random Stuff",
              "PHP Version" => phpversion()
              );

foreach( $array as &$d ){
    if($d == 5) unset($d);
}

但它没有做任何事情。有没有办法使用foreach做到这一点,或者我必须研究其他解决方案?

3 个答案:

答案 0 :(得分:2)

我认为您尝试做的是删除其值为5的数组元素, 在这种情况下,你必须写:

foreach ($array as $d => $v) {
    if ($d == 5)
        unset ($array[$d]);
}

foreach ($array as $v)枚举数组的值,而不是其键。

foreach (PHP documentation)

的更多信息

答案 1 :(得分:1)

这也可以在没有参考的情况下完成

foreach( $array as $d ){
    if($d == 5) unset($array[$d]);
}

修改

您刚刚更新了您的问题,您不能拥有2个同名的索引。您有两次索引5无效

答案 2 :(得分:0)

如果您尝试根据键而不是值来删除数组元素,则不需要创建循环if语句。您可以像在示例中一样明确地取消设置该键,看起来就像您尝试这样做:

unset($array[5]);

如果有一个你想要删除的键列表,那么你将在foreach数组中执行。

$array = array("1" => "PHP code tester Sandbox Online",  
          "foo" => "bar",
          6,
          5 => 89009, 
          "case" => "Random Stuff",
          "PHP Version" => phpversion()
          );

$remove = array('5', 'foo', 'case');

foreach ($remove as $r){
     unset($array[$r]);
};