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