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

作成日: 更新日:

array_find関数は、指定された配列の中から、特定の条件を満たす最初の要素を検索し、その要素を返す関数です。この関数は、配列内の多くの要素の中から、特定の基準に合致する最初のデータだけを見つけ出したい場合に非常に役立ちます。

この関数を利用する際は、まず検索対象となる配列を第一引数に指定します。次に、各配列要素に対して実行されるコールバック関数を第二引数に渡します。このコールバック関数は、配列の各要素を受け取り、その要素が条件を満たす場合にtrueを、満たさない場合にfalseを返します。array_find関数は、コールバック関数が初めてtrueを返した時点の要素を結果として即座に返し、残りの要素の検索は行いません。

もし、配列のすべての要素に対してコールバック関数がfalseを返し、条件を満たす要素が一つも見つからなかった場合、array_find関数はnullを返します。これにより、検索が成功したか失敗したかを明確に判断することができます。

例えば、数値の配列から特定の閾値を超える最初の数値を見つけたり、連想配列のリストから特定のキーに特定の値を持つ最初の項目を探したりするような場面で利用できます。この関数を使うことで、自分でループを記述することなく、簡潔かつ効率的に配列から目的の要素を特定することが可能になります。特に、大きな配列から特定の条件に合う最初の要素だけが必要な場合に、不要な処理を削減し、コードの可読性を高めることにも繋がります。

基本的な使い方

構文(syntax)

<?php
$searchArray = [10, 20, 30, 40, 50];

$foundElement = array_find(
    $searchArray,
    function (int $value, int $key): bool {
        // ここに検索条件を記述します。
        // 例: 値が25より大きい最初の要素を探す
        return $value > 25;
    }
);
?>

引数(parameters)

array $array, callable $callback

PHP:

  • array $array: 検索対象となる配列
  • callable $callback: 配列の各要素に対して実行されるコールバック関数

戻り値(return)

mixed

配列から指定された値と一致する最初のキーを返します。一致する要素が見つからなかった場合は、false を返します。

サンプルコード

PHPで条件に合う要素のキーを探す

<?php

/**
 * 配列内で、指定されたコールバック関数を満たす最初の要素のキーを返す。
 *
 * @param array    $array    検索対象の配列
 * @param callable $callback 各要素に対して実行するコールバック関数。
 *                           引数として要素の値とキーを受け取り、真偽値を返す。
 *
 * @return mixed 見つかった場合は最初の要素のキー、見つからない場合は null を返す。
 */
function array_find_key(array $array, callable $callback): mixed
{
    foreach ($array as $key => $value) {
        if ($callback($value, $key)) {
            return $key;
        }
    }

    return null;
}

// 使用例
$data = [
    'apple' => 'red',
    'banana' => 'yellow',
    'grape' => 'purple',
];

$key = array_find_key(
    $data,
    function (string $value, string $key): bool {
        return $value === 'yellow';
    }
);

if ($key !== null) {
    echo "キーが見つかりました: " . $key . PHP_EOL; // キーが見つかりました: banana
} else {
    echo "キーは見つかりませんでした。" . PHP_EOL;
}

$key = array_find_key(
    $data,
    function (string $value, string $key): bool {
        return $key === 'orange';
    }
);

if ($key !== null) {
    echo "キーが見つかりました: " . $key . PHP_EOL;
} else {
    echo "キーは見つかりませんでした。" . PHP_EOL; // キーは見つかりませんでした。
}

array_find_key関数は、PHP 8で配列の中から特定の条件を満たす要素のキーを検索するために使用できるユーザー定義関数です。この関数は、検索対象の配列 $array と、各要素に対して実行されるコールバック関数 $callback の2つの引数を取ります。

$callback 関数は、配列の各要素の値とキーを引数として受け取り、条件を満たすかどうかを真偽値(trueまたはfalse)で返します。array_find_key 関数は、$callbacktrue を返した最初の要素のキーを返します。もし配列内に条件を満たす要素が見つからない場合は、null を返します。

サンプルコードでは、$data という配列から値が 'yellow' である要素のキーを検索する例と、キーが 'orange' である要素を検索する例を示しています。最初の例では 'banana' というキーが見つかり、2番目の例では条件を満たす要素がないため "キーは見つかりませんでした。" と表示されます。

この関数を利用することで、配列の要素を一つずつ調べて条件に合うキーを探す手間を省き、より簡潔なコードで目的のキーを取得できます。システムエンジニアを目指す上で、配列操作は頻繁に行う処理の一つですので、この関数のような便利なツールを理解しておくことは非常に重要です。

array_find_key関数は、配列内で条件に合致する最初の要素のキーを返す自作関数です。PHP標準関数ではありませんので注意してください。コールバック関数では、要素の値とキーを引数として受け取り、条件判定を行います。条件に合う要素が見つからない場合、nullが返されます。戻り値の型宣言がmixedとなっているのは、配列のキーが文字列または数値の可能性があるためです。使用例では、キーの存在チェックだけでなく、値による検索も行っています。コールバック関数内では、引数の型を明示的に指定することで、コードの可読性と安全性を高めることができます。

PHP array_find 関数ポリフィルで要素を検索する

<?php

/**
 * Find the first element in an array that satisfies a callback function.
 *
 * This is a polyfill for array_find function which is not available in PHP.
 *
 * @param array    $array    The array to search.
 * @param callable $callback The callback function.
 *                           It should accept the element value as the first argument,
 *                           and the element key as the second argument.
 *                           It should return a boolean value indicating whether the element matches.
 *
 * @return mixed The value of the first element that satisfies the callback, or null if no element matches.
 */
if (!function_exists('array_find')) {
    function array_find(array $array, callable $callback): mixed
    {
        foreach ($array as $key => $value) {
            if ($callback($value, $key)) {
                return $value;
            }
        }

        return null;
    }
}

// Example usage:
$numbers = [1, 2, 3, 4, 5];

$evenNumber = array_find($numbers, function ($number) {
    return $number % 2 === 0;
});

echo "First even number: " . ($evenNumber ?? 'Not found') . PHP_EOL; // Output: First even number: 2

$oddNumberGreaterThanThree = array_find($numbers, function ($number) {
    return $number % 2 !== 0 && $number > 3;
});

echo "First odd number greater than 3: " . ($oddNumberGreaterThanThree ?? 'Not found') . PHP_EOL; // Output: First odd number greater than 3: 5

$stringArray = ['apple', 'banana', 'cherry'];
$longString = array_find($stringArray, function ($str) {
    return strlen($str) > 5;
});

echo "First string longer than 5 characters: " . ($longString ?? 'Not found') . PHP_EOL; // Output: First string longer than 5 characters: banana

PHP 8のarray_find関数は、配列の中から指定した条件を満たす最初の要素を検索します。このサンプルコードは、PHPに標準でarray_find関数が存在しない場合に、同様の機能を提供するポリフィル(代替実装)です。

array_find関数は、第一引数に検索対象の配列、第二引数にコールバック関数を受け取ります。コールバック関数は、配列の各要素に対して実行され、要素が条件を満たすかどうかを真偽値で返します。コールバック関数は、要素の値とキーを引数として受け取ります。

関数は、コールバック関数がtrueを返した最初の要素の値を返します。もし、どの要素も条件を満たさない場合は、nullを返します。

サンプルコードでは、数値配列から最初の偶数を見つけたり、3より大きい最初の奇数を見つけたり、文字列配列から5文字より長い最初の文字列を見つける例が示されています。これらの例を通して、array_find関数が様々なデータ型や条件で使用できることがわかります。 ??演算子は、array_find関数がnullを返した場合に、"Not found"という文字列を表示するために使用されています。これは、結果が見つからなかった場合の代替値を簡単に指定できる便利な機能です。

array_findはPHPに標準搭載されていない関数なので、サンプルコードはpolyfill(代替実装)として提供されています。この関数は、配列の要素を順番に調べ、コールバック関数がtrueを返す最初の要素の値を返します。コールバック関数では、要素の値とキーが引数として渡される点に注意してください。条件に合致する要素が見つからない場合はnullを返します。サンプルコードでは、??演算子を使ってnullの場合の代替値を表示しています。この関数は、配列の検索処理を簡潔に記述するのに役立ちますが、PHPのバージョンによっては標準関数が存在しないため、polyfillが必要になることを覚えておきましょう。

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