1

假设我正在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 来做到这一点,或者我必须研究其他解决方案?

4

3 回答 3

2

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

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

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

foreach的更多信息(PHP 文档)

于 2013-05-28T16:18:26.350 回答
1

这个也可以不用参考

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

编辑

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

于 2013-05-28T16:01:27.933 回答
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]);
};
于 2013-05-28T17:11:38.203 回答