PHPで配列をフィルタリングするときは、array_filter関数が便利です。
JavaScriptのArray.prototype.filter()
のようなコールバック関数を使った配列操作が可能となります。
第3引数によって挙動が少し変わるのでまとめました。
1〜5の数値となっている配列を用意しています。
この配列の値から偶数をフィルタリングする例です。
php1$arr = [1, 2, 3, 4, 5];2$result = array_filter($arr, function ($number) {3 return $number % 2;4});5var_dump($result);
第1引数に配列、第2引数にコールバック関数を渡しています。
第3引数は指定なしのため、デフォルトで0が設定されます。
shell1array(3) {2 [0]=>3 int(1)4 [2]=>5 int(3)6 [4]=>7 int(5)8}
return
の値がfalse
となる場合に値がフィルタリングされ、偶数がフィルタリングされました。
第3引数にARRAY_FILTER_USE_KEY
を設定すると、配列のキーをコールバックの引数として渡します。
php1$arr = [1, 2, 3, 4, 5];2$result = array_filter($arr, function ($key) {3 var_dump($key);4 return $key % 2;5}, ARRAY_FILTER_USE_KEY);67var_dump($result);
shell1int(0)2int(1)3int(2)4int(3)5int(4)6array(2) {7 [1]=>8 int(2)9 [3]=>10 int(4)
第3引数にARRAY_FILTER_USE_BOTH
を設定すると、
コールバックの引数に値とキーの両方を設定することで、
配列のキーと値を扱うことができるようになります。
php1$arr = [1, 2, 3, 4, 5];2$result = array_filter($arr, function ($number, $key) {3 var_dump($key);4 var_dump($number);5 return $number % 2;6}, ARRAY_FILTER_USE_BOTH);78var_dump($result);
shell1int(0)2int(1)3int(1)4int(2)5int(2)6int(3)7int(3)8int(4)9int(4)10int(5)11array(3) {12 [0]=>13 int(1)14 [2]=>15 int(3)16 [4]=>17 int(5)18}
array_filter
に関しては、第3引数の挙動さえ抑えておけば、
JavaScriptのArray.prototype.filter()
のような使用感で使えそうです。