お役立ち情報

PHPでarray_filterとは?配列をフィルタリングしてみよう

arrayって?

PHPはarray_filter関数を使用することで配列をフィルタリングすることができます。フィルタリングとは、たとえば特定の数値以上の数値のみを抜き出す、空の要素を探し出す、といったことです。

要素を抜き出すだけでなく削除することも可能なので、利便性の高い関数と言えます。

array_filterの基本的な使用方法

まずはarray_filterの基本的な使い方を説明します。さっそくですが、文法を見てみましょう。

array_filter( $配列 [, コールバック関数 [, $flag ]] )

第一引数にコールバック関数に渡す配列を指定、第二引数にコールバック関数を指定、第三引数にコールバック関数に送るflagを指定する、という構造になっています。次に、array_filterを使用したサンプルコードを紹介します。

<?php
function valueFilter ($var)
{
     // 400より大きい数値の配列の値を返す
     return($var > 400);
}
$value_array = [100, 200, 300, 400, 500, 600];
//array_filterを使用してコールバック関数に配列を渡す
$value = array_filter($value_array, ' valueFilter');
var_dump($value);
?>

上記のソースコードを実行すると、以下のようにコンソール出力されます。

array(2) { [4]=> int(400) [5]=> int(500) }

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

array_filter でnull要素を削除する方法

上で紹介した基本的なarray_filterの使い方では、要素を抽出しています。しかし、要素を抽出するだけでなく削除することも可能なので、以下にサンプルコードを紹介します。

<?php
function valueFilter ($var)
{
     // null以外の値を返す
     return($var <> null);
}
$value_array = [100, 200, null, 400, null];
//array_filterを使用してコールバック関数に配列を渡す
$value = array_filter($value_array, ' valueFilter ');
var_dump($value);
?>

上記のソースコードを実行すると、コンソール出力は以下のようになります。

array(3) { [0]=> int(100) [1]=> int(200) [3]=> int(400) }

null以外の値のみ返すメソッドと組み合わせることで、何も入っていない不要な要素を削除できます。

連想配列のフィルタリング

array_filterでは、一次元配列同様、連想配列や多次元配列もフィルタリングすることが可能です。具体的には以下のサンプルコードのようになります。

<?php
function valueFilter($var)
{
     // 300以上の配列の値を返す
     return($var > 300);
}
$value_array = ['A'=>100, 'B'=>200, 'C'=>300, 'D'=>400, 'E'=>500];
//array_filterを使用してコールバック関数に配列を渡す
$value = array_filter($value_array, ' valueFilter');
var_dump($value);
?>

上記のソースコードを実行すると、以下のようにコンソール出力されます。

array(2) { [“D”]=> int(400) [“E”]=> int(500) }

連想配列でも、一次元配列同様条件に合致する要素だけが抽出されました。

flagを指定してフィルタリングする

上で紹介したサンプルコードでは第三引数を指定していませんでしたが、次に第三引数のflagを指定する方法を紹介します。

<?php
function alphabetFilter($var)
{
     // 2以下の配列のキーを返す
     return($var < 2);
}
$alphabet = [0=>'A', 1=>'B', 2=>'C', 3=>'D', 4=>'E'];
//array_filterを使用してコールバック関数に配列を渡す
$alphabet_number = array_filter($alphabet, ' alphabetFilter', ARRAY_FILTER_USE_KEY);
var_dump($alphabet_number);
?>

上記のソースコードを実行すると出力は以下のようになります。

array(2) { [0]=> string(5) “A” [1]=> string(6) “B” }

配列のキーが2以下のものを返しました。

foreachでの実装

array_filterと同じ内容の処理をforeachで実装することも可能です。同じ内容の処理を、array_filterとforeeachでそれぞれ記述してみます。まずarray_filterを使用したサンプルコードは以下です。

$simpleArr = [1, 2, -1, 3, 0 -4];
$tmpArr = array_filter($simpleArr, 'higherThanZero');
print_r($tmpArr);
function higherThanZero($val){
     if($val > 0) {
          return true;
     }
}

上記のソースコードを実行すると、以下のようにコンソール出力されます。

[0] => 1
[1] => 2
[3] => 3

第一引数が配列、第二引数が関数名となっており0より大きい数字が返ってきました。まったく同じ内容をforeachを使って記述すると以下のようになります。

$simpleArr = [1, 2, -1, 3, 0 -4];
$tmpArr = [];
foreach ($simpleArr as $key=>$val){
     if($val > 0){
          $tmpArr[$key] = $val;
     }
}
print_r($tmpArr);

コードを実行すると、array_filterと同じように以下のようにコンソール出力されます。

[0] => 1
[1] => 2
[3] => 3

foreachは配列の中身をすべて条件に合致するかどうか確認できるコードです。0より大きい数字と条件を設定しておけば、array_filterと同様の実装が可能です。シンプルなコードであれば、foreachの方が書きやすいかもしれません。

以上array_filterによる配列のフィルタリング方法を解説しました。基本的には、配列から要素の抽出や削除ができます。そして引数が三つ設定でき、三つ目は任意です。実際の開発で多い使用方法としては、シンプルに条件で抽出する方法でしょう。

nullの削除に使用することもありますが、他のやり方もあるのでarray_filterで実装することはそこまで多くないかもしれません。いずれにしてもforeach同様使用頻度の高いコードなので、把握しておくと良いでしょう。

またフィルター以外にも配列で使えるメソッドは数多いので、ざっくりと一覧形式で紹介されているようなサイトに目をとおしておくと良いかもしれません。何ができるのかをあらかじめ把握しておけば、その時々で必要なロジックを思いつきやすくなります。

思いつけば詳細なコードはその都度調べれば良いので、配列においても使える関数などは事前にざっと確認しておいた方が開発の効率性が高まるでしょう。

キャリアカウンセリングのプロとして
あなたに合った案件をご案内します。

まずはお気軽にお問い合わせください!

イメージ