从二维数组中删除任何列值与给定值匹配的行

问题描述 投票:0回答:1

例如,我有以下多维数组(关联数组的数组):

array(
[0]=> (array('key01'=>'value01', 'key02'=>'value02')),
[1]=> (array('key11'=>'value11', 'key12'=>'value12')),
[2]=> (array('key21'=>'value21', 'key22'=>'value22')),
...
[N]=> (array('keyN1'=>'valueN1','keyN2'=>'valueN2'))
);

我正在寻找一个本机方法(如果存在)来查找该数组中的值并删除相应的行。例如,我将删除包含值 value21 的行,结果数组如下:

array(
[0]=> (array('key01'=>'value01', 'key02'=>'value02')),
[1]=> (array('key11'=>'value11', 'key12'=>'value12')),
...
[N]=> (array('keyN1'=>'valueN1','keyN2'=>'valueN2'))
);

(如果可能的话我不会使用for循环...)

php arrays multidimensional-array filtering
1个回答
1
投票

您可以使用带有闭包的 array_filter() 来实现此目的。

    $myArr = array(
            array('key01'=>'value01', 'key02'=>'value02'),
            array('key11'=>'value11', 'key12'=>'value12'),
            array('key21'=>'value21', 'key22'=>'value22'),
    );


    $finalArr = array_filter($myArr,function($val1){
                      $flag = true;
                      array_filter($val1,function($val2) use(&$flag){
                               if($val2 == 'value21'){
                                     $flag=false;
                               }
                      });

                      return $flag;
                });

    $finalArr = array_values($finalArr); // to get the array numerically indexed in order

但我不得不说,使用

foreach
进行嵌套
unset()
几乎是相似的。希望有帮助。

编辑:

闭包中的in_array()要简单得多

$finalArr = array_filter($myArr,function($val1){
                  return ! in_array("value21",$val1);
            });

还要记住,这里没有使用闭包,而是使用 lambda,它们都是匿名函数。

© www.soinside.com 2019 - 2024. All rights reserved.