2012-03-13 190 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