[ PHP ] 配列の要素をフィルタリングする ( array_filter )

Pocket

ここでは PHP において、配列の値に閾値を設けてフィルタリングして結果を別配列で取得するサンプルコードを掲載しています。

スポンサーリンク

foreach 文で自前でフィルタリングする

まずは、手堅く自前でフィルタリングを行うサンプルコードになります。

// 選手名と年齢の配列
$players = array('イチロー' => 10,
                 'ジロー'   => 20,
                 'サブロー' => 30);

// 20歳以上の選手のみ別配列にコピーする
foreach($players as $key => $value) {
    if($value >= 20) {
        $result[$key] = $value;
    }
}

// フィルタリング結果出力
var_dump($result);

// array
//  'ジロー' => int 20
//  'サブロー' => int 30

array_filter 関数を使用する

次に array_filter 関数を使用したフィルタリングの実装例になります。PHP では配列内のデータのフィルタリングを行うための array_filter 関数が提供されています。前述の foreach 文のようにデータとフィルタリング処理が一体となった実装方法ではなく、データとフィルタリング処理の実装を切り離すことができます。サンプルでは、無名関数を使用していますので、PHP 5.3 以降でのみ動作します。

// 選手名と年齢の配列
$players = array('イチロー' => 10,
                 'ジロー'   => 20,
                 'サブロー' => 30);

// フィルターの閾値をセット
$filter_age = 20;

/*
 * フィルターの条件(無名関数)をセット
 * 関数のリターン値が true 場合、フィルタリング後の結果セットに格納される
 */
$filter_func = function ($value) use ($filter_age) { return ($value >= $filter_age); };

/*
 * array_filter 関数でフィルタリングを行う
 */
$result = array_filter($players, $filter_func);

// フィルタリング結果出力
var_dump($result);

// array
//  'ジロー' => int 20
//  'サブロー' => int 30
参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *