Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

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

array_find関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

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

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

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

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

構文(syntax)

1<?php
2$searchArray = [10, 20, 30, 40, 50];
3
4$foundElement = array_find(
5    $searchArray,
6    function (int $value, int $key): bool {
7        // ここに検索条件を記述します。
8        // 例: 値が25より大きい最初の要素を探す
9        return $value > 25;
10    }
11);
12?>

引数(parameters)

array $array, callable $callback

PHP:

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

戻り値(return)

mixed

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

サンプルコード

PHPで配列の最初に見つかる重複値を探す

1<?php
2
3/**
4 * 配列の中から、最初に見つかる重複値を返します。
5 *
6 * この関数は、提供されたリファレンス情報に基づき、
7 * PHPに `array_find` という関数が存在することを前提としています。
8 * (注意: PHP標準ライブラリには `array_find` 関数は存在しません。
9 * 特定の拡張機能やライブラリで提供されるか、自分で定義する必要があります。)
10 *
11 * @param array<mixed> $array 検索対象の配列。
12 * @return mixed 最初に見つかった重複値、重複値がなければ null を返します。
13 */
14function findFirstDuplicateValue(array $array): mixed
15{
16    // 各値の出現回数を一度だけカウントします。
17    // これにより、どの値が複数回出現するかを効率的に特定できます。
18    $counts = array_count_values($array);
19
20    // array_find 関数を使用して、重複している最初の値を見つけます。
21    // コールバック関数は、現在処理中の $value が $counts 配列内で
22    // 1より大きい出現回数を持つ場合に true を返します。
23    // array_find は、この条件を最初に満たした $value を返します。
24    //
25    // リファレンス情報: array_find(array $array, callable $callback): mixed
26    return array_find($array, function (mixed $value) use ($counts): bool {
27        return $counts[$value] > 1;
28    });
29}
30
31// --- 使用例 ---
32
33// 重複値を含む配列の例
34$dataWithDuplicates = [10, 20, 30, 20, 40, 10, 50, 'apple', 'banana', 'apple'];
35$firstDuplicate = findFirstDuplicateValue($dataWithDuplicates);
36
37if ($firstDuplicate !== null) {
38    echo "配列内で最初に見つかった重複値: " . var_export($firstDuplicate, true) . "\n";
39    // 例として、array_findが配列の最初から検索する場合、数値の 20 が最初に見つかる重複値です。
40} else {
41    echo "配列内に重複値は見つかりませんでした。\n";
42}
43
44echo "--------------------\n";
45
46// 重複値を含まない配列の例
47$dataWithoutDuplicates = [1, 2, 3, 4, 5];
48$noDuplicate = findFirstDuplicateValue($dataWithoutDuplicates);
49
50if ($noDuplicate !== null) {
51    echo "配列内で最初に見つかった重複値: " . var_export($noDuplicate, true) . "\n";
52} else {
53    echo "配列内に重複値は見つかりませんでした。\n";
54}

このPHPサンプルコードは、与えられた配列の中から最初に見つかる重複値を特定する方法を説明しています。findFirstDuplicateValue関数がその中心となり、まずarray_count_values関数を使って配列内の各要素の出現回数を数えます。これにより、どの値が複数回出現するかを効率的に調べることができます。

次に、リファレンス情報で提示されたarray_find関数を用いて重複値を検索します。array_find関数は、第一引数に検索対象の配列、第二引数にコールバック関数を受け取ります。このコールバック関数は配列の各要素に対して実行され、要素が出現回数1より大きい(つまり重複している)場合にtrueを返します。array_findは、この条件を最初に満たした要素を戻り値として返します。もし配列内に重複値が一つも見つからなかった場合、この関数はnullを返します。

使用例では、重複する値を含む配列と含まない配列の両方でこの関数を実行し、結果を出力することで、その動作を確認できるようにしています。

このサンプルコードの最も重要な注意点は、array_find 関数がPHPの標準ライブラリには存在しないことです。このコードをそのまま実行すると、未定義関数エラーが発生しますので、ご自身で array_find 関数を定義するか、特定の拡張機能やライブラリを導入する必要があります。findFirstDuplicateValue 関数は、まず array_count_values で配列内の各値の出現回数を数え、次に array_find で出現回数が2回以上の最初の値を探します。重複値が見つからない場合は null を返しますので、コードを安全に利用するためには、戻り値は必ず null チェックを行ってください。

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

1<?php
2
3/**
4 * 配列内で、指定されたコールバック関数を満たす最初の要素のキーを返す。
5 *
6 * @param array    $array    検索対象の配列
7 * @param callable $callback 各要素に対して実行するコールバック関数。
8 *                           引数として要素の値とキーを受け取り、真偽値を返す。
9 *
10 * @return mixed 見つかった場合は最初の要素のキー、見つからない場合は null を返す。
11 */
12function array_find_key(array $array, callable $callback): mixed
13{
14    foreach ($array as $key => $value) {
15        if ($callback($value, $key)) {
16            return $key;
17        }
18    }
19
20    return null;
21}
22
23// 使用例
24$data = [
25    'apple' => 'red',
26    'banana' => 'yellow',
27    'grape' => 'purple',
28];
29
30$key = array_find_key(
31    $data,
32    function (string $value, string $key): bool {
33        return $value === 'yellow';
34    }
35);
36
37if ($key !== null) {
38    echo "キーが見つかりました: " . $key . PHP_EOL; // キーが見つかりました: banana
39} else {
40    echo "キーは見つかりませんでした。" . PHP_EOL;
41}
42
43$key = array_find_key(
44    $data,
45    function (string $value, string $key): bool {
46        return $key === 'orange';
47    }
48);
49
50if ($key !== null) {
51    echo "キーが見つかりました: " . $key . PHP_EOL;
52} else {
53    echo "キーは見つかりませんでした。" . PHP_EOL; // キーは見つかりませんでした。
54}

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で条件に合う要素のキーを探す

1<?php
2
3// PHP標準に `array_find` 関数は存在しないため、リファレンス情報に基づき定義します。
4// この関数は、Pythonの `list.index()` や JavaScriptの `Array.findIndex()` のように、
5// コールバック条件に合致する最初の要素のキー(インデックス)を返します。
6if (!function_exists('array_find')) {
7    /**
8     * 配列から指定されたコールバック条件に最初に合致する要素のキーを検索します。
9     *
10     * @param array $array 検索対象の配列。
11     * @param callable $callback 各要素に対して実行されるコールバック関数。
12     *                           引数として配列の要素の値を受け取ります。
13     *                           条件に合致する場合は true を返し、そうでない場合は false を返します。
14     * @return mixed 条件に合致した最初の要素のキー (int または string)。
15     *               どの要素も条件に合致しない場合は null を返します。
16     */
17    function array_find(array $array, callable $callback): mixed
18    {
19        foreach ($array as $key => $value) {
20            // コールバック関数が true を返した場合、そのキーを即座に返す
21            if ($callback($value)) {
22                return $key;
23            }
24        }
25        // ループが終了し、どの要素も見つからなかった場合
26        return null;
27    }
28}
29
30// --- array_find 関数の利用例 ---
31
32// サンプルデータ: ユーザーのリスト(各ユーザーは連想配列)
33$users = [
34    ['id' => 1, 'name' => 'Alice', 'status' => 'active'],
35    ['id' => 2, 'name' => 'Bob', 'status' => 'inactive'],
36    ['id' => 3, 'name' => 'Charlie', 'status' => 'active'],
37    ['id' => 4, 'name' => 'David', 'status' => 'pending'],
38];
39
40echo "--- ユーザー検索の例 ---\n";
41
42// 例1: ステータスが 'inactive' のユーザーを検索し、そのキーを取得
43// コールバック関数は配列の各要素(ここではユーザーの連想配列)を受け取り、
44// その中の 'status' キーの値が 'inactive' であるかをチェックします。
45$inactiveUserKey = array_find($users, function (array $user) {
46    return $user['status'] === 'inactive';
47});
48
49if ($inactiveUserKey !== null) {
50    echo "ステータスが 'inactive' のユーザーのキー: " . $inactiveUserKey . "\n"; // 出力: 1 (2番目の要素)
51    echo "見つかったユーザー情報:\n";
52    print_r($users[$inactiveUserKey]);
53} else {
54    echo "ステータスが 'inactive' のユーザーは見つかりませんでした。\n";
55}
56
57echo "\n";
58
59// 例2: ID が 3 のユーザーを検索し、そのキーを取得
60// コールバック関数は各ユーザーの連想配列を受け取り、
61// その中の 'id' キーの値が 3 であるかをチェックします。
62$userWithId3Key = array_find($users, function (array $user) {
63    return $user['id'] === 3;
64});
65
66if ($userWithId3Key !== null) {
67    echo "ID が 3 のユーザーのキー: " . $userWithId3Key . "\n"; // 出力: 2 (3番目の要素)
68    echo "見つかったユーザー情報:\n";
69    print_r($users[$userWithId3Key]);
70} else {
71    echo "ID が 3 のユーザーは見つかりませんでした。\n";
72}
73
74echo "\n";
75
76// 例3: 条件に合致しない場合 (名前が 'Zoe' のユーザーを検索)
77// この条件に合致するユーザーは存在しないため、null が返されます。
78$nonExistentUserKey = array_find($users, function (array $user) {
79    return $user['name'] === 'Zoe';
80});
81
82if ($nonExistentUserKey !== null) {
83    echo "Zoe という名前のユーザーのキー: " . $nonExistentUserKey . "\n";
84} else {
85    echo "Zoe という名前のユーザーは見つかりませんでした。\n"; // 出力
86}
87
88?>

array_find関数は、指定された配列の中から、特定の条件に合致する最初の要素のキーを見つけ出すための機能です。

最初の引数には、検索を行いたい配列を指定します。この配列の中から、目的の要素を探し出します。 2番目の引数には「コールバック関数」と呼ばれる、要素の検索条件を定義する関数を渡します。このコールバック関数は、配列の各要素に対して順番に実行され、もし条件に合致した場合はtrueを、合致しない場合はfalseを返すように作成します。

array_find関数は、コールバック関数が最初にtrueを返した要素の「キー」(配列のインデックス番号や連想配列のキー名)を返します。例えば、配列の0番目の要素が見つかれば0を、連想配列で'name'というキーの要素が見つかれば'name'を返します。もし、配列のどの要素も条件に合致しなかった場合は、nullを返します。

この関数を利用すると、ユーザーのリストから「ステータスが'inactive'のユーザー」や「IDが3のユーザー」のように、複雑な条件で特定の要素のキーを効率的に検索できます。見つかったキーを使って、その要素の詳しい情報にアクセスすることが可能です。

array_findはPHPの標準関数ではありません。サンプルコードでは、この関数が未定義の場合にのみ実装されるようにしています。この関数は、指定されたコールバック条件に最初に合致した要素のキーを返します。要素の値ではなくキーが戻り値となる点にご注意ください。もし条件に合致する要素が見つからない場合はnullが返されます。そのため、関数を呼び出した後は、戻り値がnullではないことを必ず確認し、安全に処理を進めることが重要です。コールバック関数は各要素を評価し、trueを返した時点で検索を終了します。

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

1<?php
2
3/**
4 * Find the first element in an array that satisfies a callback function.
5 *
6 * This is a polyfill for array_find function which is not available in PHP.
7 *
8 * @param array    $array    The array to search.
9 * @param callable $callback The callback function.
10 *                           It should accept the element value as the first argument,
11 *                           and the element key as the second argument.
12 *                           It should return a boolean value indicating whether the element matches.
13 *
14 * @return mixed The value of the first element that satisfies the callback, or null if no element matches.
15 */
16if (!function_exists('array_find')) {
17    function array_find(array $array, callable $callback): mixed
18    {
19        foreach ($array as $key => $value) {
20            if ($callback($value, $key)) {
21                return $value;
22            }
23        }
24
25        return null;
26    }
27}
28
29// Example usage:
30$numbers = [1, 2, 3, 4, 5];
31
32$evenNumber = array_find($numbers, function ($number) {
33    return $number % 2 === 0;
34});
35
36echo "First even number: " . ($evenNumber ?? 'Not found') . PHP_EOL; // Output: First even number: 2
37
38$oddNumberGreaterThanThree = array_find($numbers, function ($number) {
39    return $number % 2 !== 0 && $number > 3;
40});
41
42echo "First odd number greater than 3: " . ($oddNumberGreaterThanThree ?? 'Not found') . PHP_EOL; // Output: First odd number greater than 3: 5
43
44$stringArray = ['apple', 'banana', 'cherry'];
45$longString = array_find($stringArray, function ($str) {
46    return strlen($str) > 5;
47});
48
49echo "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が必要になることを覚えておきましょう。

関連コンテンツ

関連プログラミング言語