dongyan2445 2017-02-07 15:36
浏览 17

是否存在删除多维数组行的PHP本机方法?

For example, i have the following multidimensional array (an array of associative arrays):

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'))
);

I'm looking for a native method (if exists) that find a value in that array and remove the corresponding row. For example, i would remove row that contains value value21, the resulting array is the following:

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

(i would not use for loops if possible...)

  • 写回答

1条回答 默认 最新

  • duanjue2560 2017-02-07 16:25
    关注

    You can use array_filter() with closure to achieve this.

        $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
    

    But I will have to say that doing a nested foreach with unset() is almost similar. Hope it helps.

    Edit:

    in_array() in the closure is much simpler

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

    Also remember that there is no use of closure here rather lambda, both of them are anonymous functions.

    评论

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效