【PHP】array_filterの使い方と配列の要素をフィルタリングする方法

・PHPでarray_filterの使い方がわからない・・・。
・配列をフィルタリングするにはどうすればいいの?
・また、連想配列をフィルタリングすることはできる?

PHPではarray_filterという関数を使って、配列をフィルタリングすることができますが、正しい使い方を知らない人も多いでしょう。

そこでこの記事では、array_filterの使い方から配列のフィルタリング方法まで徹底解説します。

この記事を読めば、array_filterの使い方が網羅的にわかり、正しく配列をフィルタリングできるでしょう。

PHPで配列をフィルタリングして指定の値を抽出したいけど、やり方がわからない人は、ぜひ最後までご覧ください。

array_filterとは?

array_filterとは、配列の要素をフィルタリングする関数です。

array_filterはコールバック関数を用いて配列をフィルタリングします。

上記のコードのように、第1引数には配列を指定し、第2引数にはコールバック関数を指定します。

そして、第3引数には「ARRAY_FILTER_USE_KEY」「ARRAY_FILTER_USE_BOTH」などのフラグを指定することができます。

※フラグの指定方法については、後ほど詳しく解説します。

ちなみに、第3引数を指定しない場合は、値のみをコールバック関数の引数として渡します。

array_filterの使い方

ここでは、実際にarray_filterの使い方について解説していきます。

まだ、array_filterの使い方を知らない人は、しっかりと理解していきましょう。

array_filterの基本的な使い方

array_filterの基本的な使い方です。

コードの書き方は次のようになります。

「1〜5」の数字が入った配列「$array」があります。

コールバック関数「filterNumber」では、引数に「$num」を渡し、返り値として「$num >= 3」と指定します。

これは、配列の値が3以上の要素を返すということです。

そして、array_filterの第1引数に配列「$array」を指定し、第2引数にコールバック関数「filterNumber」を指定します。

このarray_filterを変数「$value」に代入し、var_dumpで出力してみましょう。

結果を表示すると、配列の「3〜5」までの値が出力されていますね。

これは、コールバック関数で3以上の配列の値を返すように指定したためです。

このように、array_filterはコールバック関数を使って配列をフィルタリングすることができます。

なので、使い方を覚えておくといいでしょう。

連想配列をフィルタリングする

array_filterは配列をフィルタリングすることができる関数ですが、連想配列の場合は実装できるのでしょうか?

結論から言うと、array_filterは連想配列でもフィルタリングすることが可能です。

実際のコードの書き方を見ていきましょう。

$fruitesという連想配列があります。

コールバック関数「fruites」では、引数に「$fruite」を指定し、返り値として「$fruite == ‘オレンジ’」と指定します。

これは、値が「オレンジ」である配列を返すということです。

そして、array_filterの第1引数に連想配列の「$fruites」、第2引数にコールバック関数の「fruites」を指定します。

MEMO
連想配列で、array_filterの第3引数であるフラグを指定しなかった場合は、配列の値のみがコールバック関数に渡されます。

このarray_filterを変数「$value」に代入し、var_dumpで出力してみましょう。

結果を表示すると、連想配列の中の要素「’orange’ => ‘オレンジ’」が出力されていますね。

この結果から、array_filterによって連想配列をフィルタリングされたということがわかります。

このように、array_filterは連想配列をフィルタリングすることも可能なので、使い方を覚えておきましょう。

PHPの連想配列(Key-Value Array)の基礎をおさえよう
PHPの連想配列(Key-Value Array)の基礎をおさえよう
PHPには値だけを格納する通常の配列の他に、キーと値とをペアにした連想配列というものがあります。この連想配列と ...

フラグを指定する方法

ここまでで、array_filterの使い方についてわかりました。

array_filterに第1引数の配列と第2引数のコールバック関数を指定する方法を解説しましたが、第3引数であるフラグを指定する方法についてはまだ解説していません。

なのでここでは、array_filterで第3引数のフラグ「ARRAY_FILTER_USE_KEY」と「ARRAY_FILTER_USE_BOTH」を指定する方法を解説していきます。

ARRAY_FILTER_USE_KEYを指定する

まずは、ARRAY_FILTER_USE_KEYを指定する方法です。

ARRAY_FILTER_USE_KEYは、配列のキーだけをコールバック関数に渡す役割があります。

実際のコードは次の通り。

$vegetablesという連想配列があります。

「vegetables」というコールバック関数に、引数「$vegetable」を指定し、返り値を「$vegetable >= 2」と指定します。

これは、2以上の配列のキーを返すということです。

そして、array_filterの第1引数に配列の「$vegetables」、第2引数にコールバック関数の「vegetables」、第3引数にフラグの「ARRAY_FILTER_USE_KEY」を指定します。

これで、配列のキーだけをコールバック関数に渡すことができます。

array_filterを変数$valueに代入し、var_dumpで結果を出力してみましょう。

結果は、連想配列の中の「2 => ‘キャベツ’」以降の要素が表示されていますね。

ARRAY_FILTER_USE_KEYによって、キーだけがコールバック関数に渡され、そのキーで比較した結果が出力されたのがわかります。

このように、array_filterの第3引数にARRAY_FILTER_USE_KEYを指定することで、配列のキーだけをコールバック関数に渡すことができるので、使い方を覚えておきましょう。

ARRAY_FILTER_USE_BOTHを指定する

今度は、ARRAY_FILTER_USE_BOTHを指定する方法です。

ARRAY_FILTER_USE_BOTHは、配列の値とキーの両方をコールバック関数に渡す役割があります。

実際のコードは次の通り。

先ほどと同じ配列「$vegetables」があります。

そして、今回はコールバック関数の引数にキーと値の両方を指定します。

array_filterに指定するコールバック関数の第1引数は、array_filterに指定する配列(ここでは$vegetables)の値を参照します。

そのため、コールバック関数に引数を指定する場合は、第1引数に値の「$val」、第2引数にキーの「$key」を指定しましょう。

注意
コールバック関数の引数部分だけ、キーと値の記述順が違うことに注意しましょう。

返り値は、「$key == 2 && $val == ‘キャベツ’」と指定し、配列のキーが2、かつ、値がキャベツの要素を返します。

array_filterは、第1引数に配列の「$vegetables」、第2引数にコールバック関数の「vegetables」、そして第3引数にフラグの「ARRAY_FILTER_USE_BOTH」を指定します。

これで、配列のキーと値の両方をコールバック関数に渡すことができます。

array_filterを変数「$value」に代入し、var_dumpで出力してみましょう。

結果を表示すると、「2 => ‘キャベツ’」という配列が出力されましたね。

ARRAY_FILTER_USE_BOTHによって、配列のキーと値がコールバック関数に渡され、返り値として比較された結果が表示されたのがわかります。

このように、array_filterの第3引数にARRAY_FILTER_USE_BOTHを指定することで、配列のキーと値の両方をコールバック関数に渡すことができるので、使い方を覚えておきましょう。

【PHP入門者必見】array_filterで配列をフィルタリングする方法!
【PHP入門者必見】array_filterで配列をフィルタリングする方法!
こんにちは。ITベンチャー企業でWebエンジニアをしている雅です。 PHPの配列を学んでいて、ある条件に合致し ...

まとめ

今回は、PHPのarray_filterの使い方や配列をフィルタリングする方法について解説しました。

array_filterはコールバック関数を用いて、配列をフィルタリングすることができます。

連想配列であってもフィルタリングすることが可能なので、非常に便利です。

また、フラグを指定すれば、配列のキーだけを抽出したり、キーと値の両方を抽出したりすることができるので、使い方を覚えておくといいでしょう。

この記事がPHPの学習に役立つと幸いです。

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?