【问题标题】:PHP delete sub-array from multidimensional array by sub-array key valuePHP通过子数组键值从多维数组中删除子数组
【发布时间】:2014-09-18 15:46:32
【问题描述】:

我有这个数组:

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) ""
  }
}

我想删除子数组中键“已删除”中包含值 334607943355808 的所有子数组。我得到了这个代码:

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

来自:PHP array delete by value (not key),它不是多数组,但在我的情况下我该怎么做?

编辑:

我现在是这样尝试的:

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

但它不起作用

【问题讨论】:

  • 使用嵌套的 foreach 循环并检查值是否包含您的号码?
  • 没有那么灵活,但在这种情况下它也能正常工作。
  • 你需要的是一个 FOREACH 循环。
  • 看看我的编辑,请帮忙

标签: php multidimensional-array


【解决方案1】:

只是一个简单的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]);
}

【讨论】:

  • unset(...) 之后推荐一个break; 以避免不必要的循环。
【解决方案2】:

你可以使用array_map()。试试这个

$finalArr = array_map(function($v){
    if($v['deleted'] == '334607943355808') unset($v['deleted']);
    return $v;
}, $arr);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    相关资源
    最近更新 更多