PHPで配列をフィルタリングする方法(array_filter)

2022-03-02

PHPで配列をフィルタリングするときは、array_filter関数が便利です。

JavaScriptのArray.prototype.filter()のようなコールバック関数を使った配列操作が可能となります。

第3引数によって挙動が少し変わるのでまとめました。

基本的な使い方

1〜5の数値となっている配列を用意しています。

この配列の値から偶数をフィルタリングする例です。

php
1$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が設定されます。

shell
1array(3) {
2 [0]=>
3 int(1)
4 [2]=>
5 int(3)
6 [4]=>
7 int(5)
8}

returnの値がfalseとなる場合に値がフィルタリングされ、偶数がフィルタリングされました。

第3引数にARRAY_FILTER_USE_KEYを設定する

第3引数にARRAY_FILTER_USE_KEYを設定すると、配列のキーをコールバックの引数として渡します。

php
1$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);
6
7var_dump($result);
shell
1int(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を設定する

第3引数にARRAY_FILTER_USE_BOTHを設定すると、

コールバックの引数に値とキーの両方を設定することで、

配列のキーと値を扱うことができるようになります。

php
1$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);
7
8var_dump($result);
shell
1int(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()のような使用感で使えそうです。

Tech Blog

avatar

ソフトウェアエンジニア。1989年生まれ大阪府岸和田市在住のフリーランス。PHP、バックエンド開発が得意。テニス、フットサル、だんじり、ケツメイシ、競馬、プログラミングが好き!最近はWebフロントエンド沼にハマってます!

Copyright © 2022. Junpeko5's Tech Blog