2012-03-13 120 views
2
Array 
(
    [user_mob_1] => Array 
     (
      [mob_code] => 06 
      [mob] => 069633345 
      [type] => 1 
      [phone_id] => 0 
     ) 

    [user_mob_2] => Array 
     (
      [mob_code] => 07 
      [mob] => 07123456 
      [type] => 1 
      [phone_id] => 
     ) 

    [user_mob_6] => Array 
     (
      [mob_code] => 0 
      [mob] => 
      [type] => 1 
      [phone_id] => 0 
     ) 

) 

目标是删除user_mob_ *,其中mob是空的!过滤器多维阵列

答案是:

foreach($array as $key => $row) { 
    if(empty($row['mob'])) unset($array[$key]); 
} 

简单,但我在PHP新的开始我鑫卡特使用像array_filter等

所有巧妙的是简单的功能。

+0

的可能重复[搜索和多维数组删除](http://stackoverflow.com/questions/3795227/search-and-remove-from-multidimensional-array) – Gordon 2012-03-13 09:29:10

+0

请提问之前使用搜索功能。这已被问及多次回答。 [做你的作业](http://stackoverflow.com/questions/ask-advice) – Gordon 2012-03-13 09:29:29

+2

回答你自己的问题的正确方法是作为一个答案(而不是在问题)。这样人们可以投票给出所有的答案,最好的答案可以上升到最高。 – Paul 2012-03-13 09:42:33

回答

23

使用array_filter这种内置函数的想法是非常好的; PHP有很多这些可以让你的生活更轻松。

具体而言,array_filter接受callback,您可以使用它来自定义过滤逻辑。这会工作:

$filtered = array_filter($array, function($el) { return !empty($el['mob']); }); 

这里回调为anonymous function提供。

+1

我没有downvote,但如果你注意到这个问题,没有问题问你问题,你的解决方案不会做什么提问者说解决方案是。 – Paul 2012-03-13 09:44:16

+0

@Paul:很抱歉在这之后很长时间(我是因为Matt的评论而来到这里的),但答案几乎等同于OP给出的结果(区别在于OP直接修改输入数组,而这会创建一个过滤器复制)。 – Jon 2013-11-22 10:52:39

+0

OT的答案也建立在foreach在输入数组副本上工作的事实上。对任何其他循环做同样的处理都会导致非常不理想的结果。我想说的是,对于初学者来说,看到这个原始答案可能会让他们相信在不知道为什么它真正起作用的情况下做一件安全的事情。 – Yoshi 2013-11-22 10:56:55