PHP通过子数组键值从多维数组中删除子数组

7

I've got this array:

array(5) {
  [0]=>
  array(4) {
    ["nachricht"]=>
    string(9) "blablaaaa"
    ["user"]=>
    string(15) "334607943355808"
    ["datum"]=>
    string(16) "18.09.2014 11:13"
    ["deleted"]=>
    string(0) ""
  }
  [1]=>
  array(4) {
    ["nachricht"]=>
    string(3) "joo"
    ["user"]=>
    string(15) "334607943355808"
    ["datum"]=>
    string(16) "18.09.2014 11:56"
    ["deleted"]=>
    string(15) "334607943355808"
  }
  [2]=>
  array(4) {
    ["nachricht"]=>
    string(4) "noma"
    ["user"]=>
    string(15) "334607943355808"
    ["datum"]=>
    string(16) "18.09.2014 11:56"
    ["deleted"]=>
    string(0) ""
  }
  [3]=>
  array(4) {
    ["nachricht"]=>
    string(4) "test"
    ["user"]=>
    string(15) "334607943355808"
    ["datum"]=>
    string(16) "18.09.2014 11:56"
    ["deleted"]=>
    string(0) ""
  }
  [4]=>
  array(4) {
    ["nachricht"]=>
    string(4) "doh!"
    ["user"]=>
    string(15) "334607943355808"
    ["datum"]=>
    string(16) "18.09.2014 11:56"
    ["deleted"]=>
    string(0) ""
  }
}

我希望删除所有包含键“deleted”中值为334607943355808的子数组。我有以下代码:
if(($key = array_search("334607943355808", $array)) !== false) {
            unset($array[$key]);
        }

来源: PHP数组根据值(而非键)删除。在非多维数组的情况下,如何做到这一点?

编辑:

我现在尝试了这种方法:

foreach($array as $delete){
      if(($key = array_search("334607943355808", $delete)) !== false) {
                unset($delete[$key]);
      }
}

但是它无法正常工作。

1
使用嵌套的foreach循环并检查值,以查看它们是否包含您的数字? - TheOneWhoSighs
不太灵活,但在这些情况下它同样有效。 - Karoly Horvath
你需要的是一个FOREACH循环。 - Loenix
请看我的修改,帮忙一下。 - user2966167
2个回答

6

只需简单的foreach循环即可引用子数组:

foreach($array as &$sub_array) {
    if($sub_array['deleted'] == '334607943355808') {
        $sub_array = null;
        break; //if there will be only one then break out of loop
    }
}

或者在主数组中键入:

foreach($array as $key => $sub_array) {
    if($sub_array['deleted'] == '334607943355808') {
        unset($array[$key]);
        break; //if there will be only one then break out of loop
    }
}

你也可以提取“deleted”值,按键搜索并取消设置:
if(($key = array_search('334607943355808',
                        array_column($array, 'deleted'))) !== false) {
    unset($array[$key]);
}

1
建议在 unset(...) 后加上 break; 以避免不必要的循环。 - Fr0zenFyr

2
你可以使用 array_map()。尝试这样做:
$finalArr = array_map(function($v){
    if($v['deleted'] == '334607943355808') unset($v['deleted']);
    return $v;
}, $arr);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接