2011-02-05 32 views
3

何らかの条件を満たす配列からすべての要素を削除したいと思います。PHP:フィルタ配列

例えば、私は、この2次元配列があります。

[ 
    ['UK', '12', 'Sus', 'N'], 
    ['UK', '12', 'Act', 'Y'], 
    ['SQ', '14', 'Act', 'Y'], 
    ['CD', '12', 'Act', 'Y'] 
] 

を、私はこのフォーマットに一致しないすべての行を削除したいと思います:

['UK' or 'CD', '12', Any Value, 'Y'] 

をこのフィルタ配列を私に残しました:

[ 
    ['UK', '12', 'Act', 'Y'], 
    ['CD', '12', 'Act', 'Y'] 
] 

どうすればいいですか?

+3

私は疑問符を参照してくださいません。これは問題ではなく、問題の説明です。それはうまくいきませんでした。これはかなり簡単ですが、それを簡単に行う方法は十数あります。 –

答えて

7

を使用してください。コールバックを提供することで、各項目のチェックを実行することができます。そのコールバック関数では、条件に一致する項目に対してtrueを返します。 array_filterは、条件に一致しないすべての項目が削除された配列を返します。例えば

、あなたの例の配列は次のようにフィルタリングすることができます

$array = [ 
    ['UK', '12', 'Sus', 'N'], 
    ['UK', '12', 'Act', 'Y'], 
    ['SQ', '14', 'Act', 'Y'], 
    ['CD', '12', 'Act', 'Y'] 
]; 

$filtered_array = array_filter($array, function ($item) { 
    return count($item) >= 4 && 
      ($item[0] == 'UK' || $item[0] == 'CD') && 
      $item[1] == '12' && 
      $item[3] == 'Y'; 
}); 

print_r($filtered_array); 
+0

私はちょうどこれに相当な編集をしました。あなたが承認していない場合は、それをロールバックするか、さらに微調整してください。 –