例如,我有以下多维数组(关联数组的数组):
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循环...)
您可以使用带有闭包的 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,它们都是匿名函数。