【PHP8.x】array_filter関数の使い方

作成日: 更新日:

array_filter関数は、指定された配列の要素を、特定の条件に基づいてフィルタリングし、新しい配列を作成する関数です。

この関数は第一引数にフィルタリング対象の配列を、第二引数にはオプションでコールバック関数を受け取ります。コールバック関数が各要素に対して実行され、trueを返した要素のみが、結果として返される新しい配列に含まれます。もしコールバック関数が省略された場合、PHPの型変換ルールに基づいてfalseと評価される要素(例えば、空文字列""、数値の0nullなど)は自動的に結果の配列から除外されます。

さらに、第三引数としてフラグを指定することも可能です。ARRAY_FILTER_USE_KEYフラグを使用すると、コールバック関数に要素の値ではなくキーが渡され、キーに基づいてフィルタリングを行えます。ARRAY_FILTER_USE_BOTHフラグを使用すると、コールバック関数に要素の値とキーの両方が渡されるため、より柔軟な条件でフィルタリングを実行できます。

array_filter関数は、元の配列を変更することなく、フィルタリングされた要素のみを含む新しい配列を返します。この機能は、データセットから特定の条件を満たす情報だけを抽出したり、不要な要素を効率的に除去したりする際に非常に有用で、コードの可読性と保守性を高めることができます。

基本的な使い方

構文(syntax)

<?php
$numbers = [1, 2, 3, 4, 5, 6];
$even_numbers = array_filter($numbers, function($number) {
    return $number % 2 === 0;
});
print_r($even_numbers);
?>

引数(parameters)

array $array, ?callable $callback = null, int $mode = 0

  • array $array: フィルタリングする配列
  • ?callable $callback: 各要素に対して呼び出されるコールバック関数。指定しない場合は、falseとして評価される要素が削除される
  • int $mode = 0: コールバック関数に渡される引数のモード。ARRAY_FILTER_USE_KEY(キーを渡す)、ARRAY_FILTER_USE_BOTH(キーと値の両方を渡す)のいずれかを指定できる。デフォルトは0(値のみを渡す)

戻り値(return)

array

指定された条件に基づき、PHP 8.4 の array_filter 関数の戻り値の説明を生成します。

array_filter 関数は、配列からコールバック関数によって true と評価された要素のみを抽出した新しい配列を返します。

サンプルコード

PHP array_filter で配列を抽出する

<?php

/**
 * array_filter 関数を使ったサンプルコード
 *
 * 配列から指定した条件に合致する要素のみを抽出します。
 * 'use' キーワードを使って、クロージャ内で外部変数を参照する方法も示します。
 */

// フィルタリング対象の配列
$data = [
    'a' => 1,
    'b' => 2,
    'c' => 3,
    'd' => 4,
    'e' => 5,
];

// 閾値
$threshold = 3;

// コールバック関数(クロージャ): 閾値を超える要素のみを抽出
$filtered_data = array_filter(
    $data,
    function ($value) use ($threshold) {
        // $value が $threshold より大きい場合に true を返す
        return $value > $threshold;
    }
);

// 結果の表示
print_r($filtered_data);

// array_filter の第3引数を使って、キーをコールバック関数に渡す例
$keys = ['a', 'b'];

$filtered_data_with_keys = array_filter(
    $data,
    function ($value, $key) use ($keys) {
        // キーが $keys に含まれているかチェック
        return in_array($key, $keys);
    },
    ARRAY_FILTER_USE_KEY
);

print_r($filtered_data_with_keys);

// array_filter の第3引数を使って、キーと値をコールバック関数に渡す例
$filtered_data_with_both = array_filter(
    $data,
    function ($value, $key) {
        // 値が偶数かつキーがアルファベット順で若いものだけ抽出
        return ($value % 2 == 0) && ($key < 'd');
    },
    ARRAY_FILTER_USE_BOTH
);

print_r($filtered_data_with_both);

array_filter関数は、配列の要素をコールバック関数でフィルタリングし、条件に合致する要素のみを含む新しい配列を返します。第一引数にはフィルタリング対象の配列 $array を指定します。第二引数には、各要素に対して実行されるコールバック関数 $callback を指定します。コールバック関数は、要素を保持する場合は true、破棄する場合は false を返す必要があります。$callbacknull の場合、$array のうち false と評価される要素がすべて削除されます。

この例では、まず $data 配列から、$threshold の値(ここでは3)より大きい要素のみを抽出しています。use ($threshold) は、クロージャ(無名関数)内で外部変数の $threshold を参照するために使用します。

次に、array_filter の第3引数に ARRAY_FILTER_USE_KEY を指定することで、コールバック関数にキーを渡すことができます。この例では、キーが $keys 配列に含まれている要素のみを抽出しています。in_array() 関数は、配列に特定の値が含まれているかどうかを確認するために使用されます。

さらに、array_filter の第3引数に ARRAY_FILTER_USE_BOTH を指定することで、コールバック関数にキーと値の両方を渡すことができます。この例では、値が偶数で、かつキーが d よりアルファベット順で前の要素のみを抽出しています。

戻り値は、フィルタリングされた新しい配列です。元の配列 $array は変更されません。array_filter は、配列から特定の条件を満たす要素を効率的に抽出する際に役立ちます。

array_filter関数は、配列から条件に合致する要素を抽出する際に非常に便利です。コールバック関数内でuseキーワードを使うと、外部変数をクロージャ内で参照できます。これは、フィルタリングの条件を外部から渡したい場合に有効です。第3引数にARRAY_FILTER_USE_KEYまたはARRAY_FILTER_USE_BOTHを指定すると、キーやキーと値の両方をコールバック関数に渡すことができます。ただし、コールバック関数内では、渡されたキーや値が期待するものと一致するか確認するようにしましょう。また、コールバック関数がtrueまたはfalseを返すことを確認してください。意図しない型を返すと、予期せぬ結果になる可能性があります。

PHP連想配列を条件でフィルタリングする

<?php

/**
 * 連想配列から特定の条件に合致する要素を抽出するサンプル
 */
function filterAssociativeArray(array $data, callable $callback): array
{
    // array_filter関数を使って、指定されたコールバック関数に基づいて配列をフィルタリング
    $filteredArray = array_filter($data, $callback, ARRAY_FILTER_USE_BOTH);

    return $filteredArray;
}

// サンプルの連想配列
$data = [
    'apple' => 5,
    'banana' => 10,
    'orange' => 3,
    'grape' => 8,
];

// 値が5より大きい要素のみを抽出するコールバック関数
$callback = function ($value, $key) {
    return $value > 5;
};

// フィルタリングを実行
$filteredData = filterAssociativeArray($data, $callback);

// 結果を出力
print_r($filteredData);

?>

このサンプルコードは、PHPのarray_filter関数を使って、連想配列から特定の条件を満たす要素を抽出する方法を示しています。array_filter関数は、第一引数にフィルタリング対象の配列、第二引数にコールバック関数を受け取ります。コールバック関数は、配列の各要素に対して実行され、trueを返した要素のみが結果の配列に含まれます。第三引数 $mode は、コールバック関数に渡す引数を制御します。サンプルでは ARRAY_FILTER_USE_BOTH を指定しており、コールバック関数にキーと値の両方が渡されます。

filterAssociativeArray関数は、連想配列 $data とコールバック関数 $callback を引数に取り、array_filter関数を使ってフィルタリングされた配列を返します。サンプルでは、値が5より大きい要素のみを抽出するコールバック関数を定義し、filterAssociativeArray関数に渡しています。

array_filter関数は、元の配列のキーを保持したまま新しい配列を生成します。コールバック関数が null の場合、配列の要素が (bool) $value == false と評価される要素が削除されます。このサンプルコードを通じて、array_filter関数とコールバック関数を組み合わせることで、連想配列から必要な要素を効率的に抽出できることを理解できます。初心者のシステムエンジニアにとって、データの加工処理を理解する上で役立つでしょう。

array_filter関数は、連想配列を扱う際、キーを保持したままフィルタリングを行います。コールバック関数内でキーと値の両方を使用したい場合は、第3引数にARRAY_FILTER_USE_BOTHを指定する必要があります。省略した場合、値のみがコールバック関数に渡されます。コールバック関数は、各要素に対してtrueまたはfalseを返す必要があり、trueを返した要素のみが結果の配列に含まれます。元の配列のキーは保持されるため、結果の配列のキーが連番にならない場合があります。また、コールバック関数を指定しない場合、配列の各要素がempty()関数で評価され、empty()falseと評価される要素のみが残ります。

【PHP8.x】array_filter関数の使い方 | いっしー@Webエンジニア