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

) 

目標は、mobが空のuser_mob_ *を削除することです!多次元配列をフィルタリングする

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

シンプルな、しかし私は、PHPでの新たなんだと最初に私はarray_filterなど

すべての独創的でシンプルであるような関数を使用するthinked:

答えがあります。

+0

[多次元配列からの検索と削除](http://stackoverflow.com/questions/3795227/search-and-remove-from-multidimensional-array) – Gordon

+0

質問の前に検索機能を使用してください。これは前に何度も尋ねられ、答えられています。 [あなたの宿題をしなさい] – Gordon

+2

あなた自身の質問に答える正しい方法は答えである(質問ではなく)。そうすれば、人々は与えられたすべての答えに投票することができ、最良のものは上に上がることができます。 – Paul

答えて

23

array_filterのような組み込み関数を使用するあなたの考えは非常に優れています。 PHPには、あなたの人生を楽にしてくれる多くのものがあります。

具体的には、array_filtercallbackを受け入れ、フィルタリングロジックをカスタマイズすることができます。これは動作します:

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

ここでコールバックはanonymous functionとして提供されます。

+1

私はdownvoteしませんでしたが、あなたが質問に気づいた場合、質問はありませんでしたし、あなたのソリューションは何をしません質問者は解決策があると言いました。 – Paul

+0

@Paul:後でこれを掘り下げて申し訳ありませんが(私はMattのコメントのためにここに来ました)、答えはOPが与えるものとほぼ同じです(OPが入力配列を直接変更している間に、コピー)。 – Jon

+0

また、OTの答えは、foreachが入力配列のコピーで動作するという事実に基づいています。他のループと同じことを行うと、非常に望ましくない結果につながります。私が言っていることは、PHPの初心者のために、orignalの答えを見て、それが実際に動作する理由を知らずに行うことは安全だと信じさせることができるということです。 – Yoshi