【PHP8.x】array_search()関数の使い方
array_search関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
array_search関数は、指定された値が配列の中に存在するかどうかを検索し、その値が見つかった場合のキー(インデックス)を返す関数です。この関数は、複数のデータが格納された配列の中から、特定の要素の位置を効率的に探し出したい場合に非常に役立ちます。
この関数を使用する際は、まず検索したい値と、その値が含まれる可能性のある配列を引数として指定します。もし指定した値が配列の中から見つかった場合、array_search関数は、その値が格納されている位置を示すキーを返します。例えば、数値が0から始まる配列であれば、0、1、2といった整数値がキーとして返されます。
一方、もし配列の中に指定した値が見つからなかった場合は、論理値のfalseを返します。このfalseという戻り値は、検索が成功しなかったことを明確に示しますので、この関数の結果を受け取った際には、falseかどうかを適切にチェックして、次の処理を分岐させることが重要です。
さらに、array_search関数にはオプションで第三引数を指定することができます。この第三引数をtrueに設定すると、値の比較を行う際に、値だけでなくデータの型も厳密に一致するかどうかを調べます。これにより、数値の5と文字列の"5"のように、値は同じでも型が異なるデータを区別して検索することが可能となり、より厳密な検索を行いたい場合に利用されます。
array_search関数は、配列操作の基本でありながら、配列内の特定要素の特定に広く利用される基本的な関数です。
構文(syntax)
1<?php 2$data = ['apple', 'banana', 'orange', 10, '10']; 3$search_item = 'banana'; 4$strict_search_item = 10; 5 6$key_simple_search = array_search($search_item, $data); 7$key_non_strict_number_search = array_search($strict_search_item, $data); 8$key_strict_number_search = array_search($strict_search_item, $data, true); 9$key_not_found = array_search('grape', $data); 10?>
引数(parameters)
mixed $needle, array $haystack, bool $strict = false
- mixed $needle: 検索したい値
- array $haystack: 検索対象となる配列
- bool $strict = false: 真偽値。trueの場合、厳密な比較(値と型が一致するか)を行う
戻り値(return)
string|int|false
指定された値を配列の中から検索し、最初に見つかった要素のキーを返します。見つからなかった場合は false を返します。
サンプルコード
PHP array_search 戻り値の挙動
1<?php 2 3/** 4 * array_search 関数の戻り値の挙動を示すサンプルコードです。 5 * 6 * array_search は、配列から特定の値を検索し、見つかった場合はその値に対応するキーを返します。 7 * 値が見つからない場合は、boolean 型の false を返します。 8 * 9 * PHPでは、数値の 0 は boolean の false と非厳密な比較 (==) で等価とみなされるため、 10 * array_search が数値の 0 を返す可能性がある場合(例: 最初の要素のキーが 0 の場合)には、 11 * 戻り値のチェックには厳密な比較演算子 (===) を使用することが非常に重要です。 12 */ 13function demonstrateArraySearchReturnValues(): void 14{ 15 // 検索対象となる配列を定義します。 16 $products = [ 17 0 => 'apple', // キーが数値の 0 18 1 => 'banana', // キーが数値の 1 19 'code_c' => 'cherry', // キーが文字列 20 'code_d' => 'date', // キーが文字列 21 ]; 22 23 echo "--- 検索対象の配列の内容 ---\n"; 24 print_r($products); 25 echo "--------------------------\n\n"; 26 27 // ---------------------------------------------------- 28 // ケース1: 検索値が見つかり、数値のキー (0以外) が返される場合 29 // ---------------------------------------------------- 30 $searchTerm1 = 'banana'; 31 $result1 = array_search($searchTerm1, $products); 32 33 echo "検索値: '{$searchTerm1}'\n"; 34 // 戻り値が false ではない場合、キーが見つかったと判断します。 35 if ($result1 !== false) { 36 echo "結果: 値 '{$searchTerm1}' はキー '{$result1}' で見つかりました。\n"; 37 echo "戻り値の型: " . gettype($result1) . " (int)\n"; 38 } else { 39 echo "結果: 値 '{$searchTerm1}' は見つかりませんでした。\n"; 40 } 41 echo "----------------------------------------------------\n\n"; 42 43 // ---------------------------------------------------- 44 // ケース2: 検索値が見つかり、文字列のキーが返される場合 45 // ---------------------------------------------------- 46 $searchTerm2 = 'cherry'; 47 $result2 = array_search($searchTerm2, $products); 48 49 echo "検索値: '{$searchTerm2}'\n"; 50 if ($result2 !== false) { 51 echo "結果: 値 '{$searchTerm2}' はキー '{$result2}' で見つかりました。\n"; 52 echo "戻り値の型: " . gettype($result2) . " (string)\n"; 53 } else { 54 echo "結果: 値 '{$searchTerm2}' は見つかりませんでした。\n"; 55 } 56 echo "----------------------------------------------------\n\n"; 57 58 // ---------------------------------------------------- 59 // ケース3: 検索値が見つからず、boolean の false が返される場合 60 // ---------------------------------------------------- 61 $searchTerm3 = 'grape'; 62 $result3 = array_search($searchTerm3, $products); 63 64 echo "検索値: '{$searchTerm3}'\n"; 65 // 見つからない場合は `false` が返されます。 66 // ここでは `=== false` を使用して、戻り値が厳密に `false` であるかをチェックします。 67 if ($result3 === false) { 68 echo "結果: 値 '{$searchTerm3}' は見つかりませんでした。\n"; 69 echo "戻り値の型: " . gettype($result3) . " (boolean)\n"; 70 } else { 71 echo "結果: 値 '{$searchTerm3}' はキー '{$result3}' で見つかりました。\n"; 72 } 73 echo "----------------------------------------------------\n\n"; 74 75 // ---------------------------------------------------- 76 // ケース4: 検索値が配列の最初の要素(キーが0)である場合 77 // 戻り値が数値の 0 となるため、厳密な比較 (===) が特に重要です。 78 // ---------------------------------------------------- 79 $searchTerm4 = 'apple'; // この値のキーは数値の 0 です 80 $result4 = array_search($searchTerm4, $products); 81 82 echo "検索値: '{$searchTerm4}' (キーが0の要素)\n"; 83 // `$result4` には数値の `0` が入ります。 84 // もし `if ($result4 == false)` (非厳密な比較) を使うと、 85 // `0 == false` は `true` と評価されてしまい、「見つかりませんでした」と誤判定されます。 86 // したがって、`=== false` (厳密な比較) を使用することが必須です。 87 if ($result4 === false) { 88 echo "結果: 値 '{$searchTerm4}' は見つかりませんでした。\n"; 89 echo "戻り値の型: " . gettype($result4) . " (boolean) - この場合はありえません\n"; 90 } else { 91 echo "結果: 値 '{$searchTerm4}' はキー '{$result4}' で見つかりました。\n"; 92 echo "戻り値の型: " . gettype($result4) . " (int)\n"; 93 } 94 echo " [重要] 戻り値が数値の 0 の場合、非厳密な比較 '== false' は true になるため注意が必要です。\n"; 95 echo " 必ず 'if (\$result === false)' のように厳密な比較を使用してください。\n"; 96 echo "----------------------------------------------------\n\n"; 97} 98 99// 上記の関数を実行して、array_search の動作を確認します。 100demonstrateArraySearchReturnValues(); 101 102?>
PHPのarray_search関数は、配列の中から特定の値を検索し、その値が見つかった場合のキーを返すために使用されます。この関数は、第一引数に検索したい値($needle)、第二引数に検索対象の配列($haystack)を指定して呼び出します。
値が配列内で見つかった場合、array_searchはその値に対応するキーを返します。このキーは数値(int型)または文字列(string型)のいずれかになります。例えば、配列の最初の要素で値が見つかり、そのキーが0であれば、戻り値は数値の0となります。
一方、指定された値が配列内に存在しなかった場合、array_searchはboolean型のfalseを返します。
array_searchの戻り値を扱う上で特に重要なのは、PHPでは数値の0が非厳密な比較(==)においてfalseと等価とみなされる点です。このため、もし検索値が配列のキー0の要素であった場合、戻り値は数値の0ですが、if ($結果 == false)のように非厳密な比較を使うと、誤って「値が見つからなかった」と判断されてしまいます。このような誤判定を避けるため、値が見つからなかったことを判定する際には、if ($結果 === false)のように厳密な比較演算子(===)を使用することが非常に重要です。このサンプルコードは、様々なケースにおけるarray_searchの戻り値の型と、厳密な比較の必要性を具体的に示しています。
array_search関数は、配列から指定した値が見つかった場合、そのキー(数値または文字列)を返します。値が見つからない場合は、boolean型のfalseを返します。
システムエンジニアを目指す初心者が特に注意すべき点は、検索対象の値が配列のキー0に対応している場合です。このとき、関数は数値の0を戻り値として返します。PHPでは、数値の0とboolean型のfalseが非厳密な比較演算子(==)で等価とみなされるため、if ($result == false)という条件式を使うと、キー0で見つかった場合でも「見つからなかった」と誤判定されてしまいます。
この誤判定を防ぎ、コードを安全かつ正確に利用するためには、戻り値をチェックする際に必ずif ($result === false)のように厳密な比較演算子(===)を使用してください。これにより、falseと数値の0を明確に区別できます。
PHP array_search で複数ヒット時の挙動
1<?php 2 3/** 4 * array_search 関数の基本的な使い方を示すサンプルコードです。 5 * キーワード「複数」を考慮し、同じ値が配列に複数存在する場合でも 6 * array_search が最初に見つかったキーのみを返す挙動を実演します。 7 */ 8function demonstrateArraySearchMultipleOccurrences(): void 9{ 10 // 検索対象の配列。'apple' が複数回出現します。 11 $fruits = ['apple', 'banana', 'orange', 'apple', 'grape', 'apple']; 12 $searchValue = 'apple'; 13 14 // array_search は、配列内で検索値が見つかった場合、その最初のキーを返します。 15 // ここでは 'apple' が複数回出現しますが、関数はインデックス 0 を返します。 16 $firstOccurrenceKey = array_search($searchValue, $fruits); 17 18 if ($firstOccurrenceKey !== false) { 19 echo "値 '{$searchValue}' は配列のキー {$firstOccurrenceKey} で最初に見つかりました。\n"; 20 } else { 21 echo "値 '{$searchValue}' は配列に見つかりませんでした。\n"; 22 } 23 24 echo "----------------------------------------\n"; 25 26 // array_search の厳密な比較 (strict) モードの例。 27 // このモードでは、値だけでなく型も一致する必要があります。 28 $mixedValues = [1, '2', 3, '1', 1.0]; 29 $searchStrictValue = 1; // 整数型 1 を検索 30 31 // strict パラメータを true に設定すると、型も比較されます (===)。 32 // この場合、インデックス 0 の '1' (整数) が一致し、インデックス 3 の '1' (文字列) や 33 // インデックス 4 の 1.0 (浮動小数点数) は型が異なるため一致しません。 34 $strictKey = array_search($searchStrictValue, $mixedValues, true); 35 36 if ($strictKey !== false) { 37 echo "厳密な比較で値 '{$searchStrictValue}' (型: " . gettype($searchStrictValue) . ") は配列のキー {$strictKey} で最初に見つかりました。\n"; 38 } else { 39 echo "厳密な比較で値 '{$searchStrictValue}' (型: " . gettype($searchStrictValue) . ") は配列に見つかりませんでした。\n"; 40 } 41} 42 43// サンプル関数の実行 44demonstrateArraySearchMultipleOccurrences(); 45
PHPのarray_search関数は、配列の中から指定した値を探し、最初に見つかったキー(インデックス番号または連想配列の文字列キー)を返す関数です。
第一引数$needleには検索したい値を、第二引数$haystackには検索対象となる配列を指定します。第三引数$strictはオプションで、trueに設定すると値だけでなくデータ型も厳密に比較します。この引数を省略した場合(デフォルトfalse)、PHPは値を比較する際に必要に応じて型を変換します。
array_searchは、検索値が配列内に複数存在する場合でも、最初に見つかった値のキーのみを返します。例えば、同じ値が配列の異なる位置に複数ある場合でも、関数は一番初めに見つかったその位置のキーのみを報告します。
検索値が見つかった場合はそのキー(整数または文字列)を、見つからなかった場合はfalseを返します。戻り値が0などの有効なキーである可能性もあるため、結果を確認する際はif ($result !== false)のように厳密な比較を用いることが重要です。
strictモードをtrueにすると、値と型が完全に一致する場合にのみ見つかったと判断します。例えば、整数1と文字列'1'は値は同じでも型が異なるため、strictモードでは別物として扱われます。これにより、型変換による意図しない結果を防ぎ、より正確な検索が可能になります。
array_search関数は、配列内に検索値が複数存在しても最初に見つかったキーのみを返します。すべての出現箇所を探したい場合は、ループ処理など別の方法を検討してください。戻り値はキー(整数または文字列)か、値が見つからない場合はブール値falseです。配列のキーが0の場合とfalseを混同しないよう、検索結果の確認には!== falseのような厳密な比較を必ず使用してください。また、第三引数strictをtrueに設定すると、値だけでなく型も厳密に比較されるため、予期せぬ型変換によるバグを防ぐために活用を推奨します。
PHP array_search で複数条件を検索する
1<?php 2 3/** 4 * 複数の項目が配列内に存在するかどうかを検索し、その結果を返します。 5 * array_search関数を各項目に対して個別に適用し、最初に見つかったキーを取得します。 6 * 7 * @param array $needles 検索したい複数の値の配列。 8 * @param array $haystack 検索対象となる配列。 9 * @param bool $strict 厳密な型比較を行うかどうか (array_searchの第三引数と同じ)。 10 * trueの場合、値と型が両方一致する要素のみが「見つかった」とされます。 11 * @return array 各検索項目に対する結果の配列。キーは検索した値、値は見つかったキー (string|int) または false。 12 */ 13function findMultipleItems(array $needles, array $haystack, bool $strict = false): array 14{ 15 $results = []; 16 foreach ($needles as $needle) { 17 // array_search関数を使用して、各項目が配列に存在するかを検索 18 // 見つかった場合はそのキー(数値または文字列)、見つからなかった場合はfalseを返します。 19 $key = array_search($needle, $haystack, $strict); 20 $results[$needle] = $key; // 検索した値とその結果を保存 21 } 22 return $results; 23} 24 25// --- サンプルコードの実行例 --- 26 27// 検索対象となる配列データ 28$data = ['apple', 'banana', 'orange', 'grape', '5', 10, 'banana']; 29 30// 検索したい複数の値のリスト 31$searchValues = ['banana', 'kiwi', 'apple', 5, '10']; 32 33echo "--- 非厳密モード (strict = false) での検索 --- \n"; 34// 非厳密モードでの検索実行 35// '5' == 5 は true となるため、文字列の '5' と数値の 5 は一致と見なされます。 36$searchResultsNonStrict = findMultipleItems($searchValues, $data, false); 37 38foreach ($searchResultsNonStrict as $value => $key) { 39 if ($key !== false) { 40 echo "値 '{$value}' は配列のキー '{$key}' で見つかりました。\n"; 41 } else { 42 echo "値 '{$value}' は配列に見つかりませんでした。\n"; 43 } 44} 45 46echo "\n--- 厳密モード (strict = true) での検索 --- \n"; 47// 厳密モードでの検索実行 48// '5' == 5 は false となるため、文字列の '5' と数値の 5 は一致と見なされません。 49$searchResultsStrict = findMultipleItems($searchValues, $data, true); 50 51foreach ($searchResultsStrict as $value => $key) { 52 if ($key !== false) { 53 echo "値 '{$value}' は配列のキー '{$key}' で見つかりました。\n"; 54 } else { 55 echo "値 '{$value}' は配列に見つかりませんでした。\n"; 56 } 57} 58 59?>
PHPのarray_search関数は、指定された配列の中から特定の値を検索し、その値が見つかった最初のキーを返す機能を持っています。第一引数$needleに検索したい値を、第二引数$haystackに検索対象の配列を指定します。第三引数$strictはオプションで、trueを設定すると、値だけでなくデータ型も完全に一致する場合のみ「見つかった」と判断する厳密な比較を行います。false(デフォルト)の場合は、データ型を考慮せず値が等しければ見つかったと判断されます。検索した値が見つかった場合は、その値のキー(数値または文字列)を返しますが、見つからなかった場合はfalseを返します。
提供されたサンプルコードでは、このarray_search関数を活用し、複数の値を配列から一括で検索するfindMultipleItemsというカスタム関数が定義されています。この関数は、検索したい値のリスト($needles)を受け取り、リストの各値に対してarray_searchを繰り返し実行することで、複数の検索結果をまとめて返します。実行例では、非厳密モードと厳密モードの両方で検索が行われており、例えば数値の5と文字列の'5'のようなデータ型の違いが、$strict引数の設定によって検索結果にどのように影響するかが具体的に示されています。これにより、配列内の特定の要素の存在確認やその位置特定を効率的に行うことができます。
array_search関数は、配列内で最初に一致した要素のキーを返します。同じ値が複数存在しても、最初の1つだけが結果として得られる点にご注意ください。要素が見つからない場合はfalseを返すため、結果を利用する際は!== falseのように厳密な比較で判定することが重要です。
第三引数$strictをtrueに設定すると、値と型の両方が一致する場合にのみ「見つかった」と判断されます。デフォルトのfalseでは型が異なっても値が同じであれば一致と見なされるため、5(数値)と'5'(文字列)を区別したい場合は$strictをtrueに設定してください。これにより、意図しないマッチを防ぎ、より正確で安全な検索が可能となります。
PHP連想配列のarray_searchによる値検索
1<?php 2 3/** 4 * 連想配列から特定の値を検索し、そのキーを特定するサンプルコードです。 5 * array_search関数は、指定した値が配列内に存在するかどうかを調べ、 6 * 見つかった場合はその要素のキーを返します。見つからない場合はfalseを返します。 7 */ 8 9/** 10 * array_search_associative_array_example 関数 11 * 12 * 連想配列に対して array_search() 関数を使用する例を示します。 13 */ 14function array_search_associative_array_example(): void 15{ 16 // 検索対象となる連想配列を定義します。 17 // キーは文字列、値も文字列です。 18 $users = [ 19 'john_doe' => 'John Doe', 20 'jane_smith' => 'Jane Smith', 21 'peter_jones' => 'Peter Jones', 22 'alice_williams' => 'Alice Williams', 23 'guest_user' => '123', // 値が数値のように見えるが、型は文字列 24 ]; 25 26 echo "--- 存在する値の検索 (デフォルトモード: 非厳密) ---\n"; 27 28 // 存在する値 'Jane Smith' を検索します。 29 // array_search($needle, $haystack, $strict = false) 30 // 第3引数を省略した場合、非厳密モード (false) となり、値の比較時に型を考慮しません。 31 $searchTerm1 = 'Jane Smith'; 32 $key1 = array_search($searchTerm1, $users); 33 34 // 検索結果がfalseではないことを確認します。 35 // array_searchは、見つからない場合にfalseを返すため、厳密な比較 (=== false または !== false) を推奨します。 36 if ($key1 !== false) { 37 echo "値 '{$searchTerm1}' はキー '{$key1}' で見つかりました。\n"; 38 } else { 39 echo "値 '{$searchTerm1}' は見つかりませんでした。\n"; 40 } 41 42 echo "\n--- 存在しない値の検索 (デフォルトモード: 非厳密) ---\n"; 43 44 // 存在しない値 'Mike Davis' を検索します。 45 $searchTerm2 = 'Mike Davis'; 46 $key2 = array_search($searchTerm2, $users); 47 48 if ($key2 !== false) { 49 echo "値 '{$searchTerm2}' はキー '{$key2}' で見つかりました。\n"; 50 } else { 51 echo "値 '{$searchTerm2}' は見つかりませんでした。\n"; 52 } 53 54 echo "\n--- 厳密モードでの検索 (型も比較) ---\n"; 55 56 // 値が文字列 '123' のエントリが存在します。 57 // 検索値として数値の 123 を使用してみます。 58 59 // 非厳密モードの場合 (strict = false): 60 // PHPは自動的に型変換を試みるため、文字列 '123' と数値 123 は同じと見なされます。 61 $searchTerm3 = 123; // 数値型 62 $key3_nonStrict = array_search($searchTerm3, $users, false); // 第3引数を明示的にfalseに指定 63 64 if ($key3_nonStrict !== false) { 65 echo "非厳密モード: 値 '{$searchTerm3}' (数値) はキー '{$key3_nonStrict}' で見つかりました。\n"; 66 } else { 67 echo "非厳密モード: 値 '{$searchTerm3}' (数値) は見つかりませんでした。\n"; 68 } 69 70 // 厳密モードの場合 (strict = true): 71 // 値と型の両方が一致する場合にのみ見つかります。 72 // '123' (文字列) と 123 (数値) は型が異なるため、一致しません。 73 $searchTerm4 = 123; // 数値型 74 $key4_strict = array_search($searchTerm4, $users, true); // 第3引数をtrueに指定 75 76 if ($key4_strict !== false) { 77 echo "厳密モード: 値 '{$searchTerm4}' (数値) はキー '{$key4_strict}' で見つかりました。\n"; 78 } else { 79 echo "厳密モード: 値 '{$searchTerm4}' (数値) は見つかりませんでした。\n"; 80 } 81 82 // 厳密モードで文字列 '123' を検索する場合 83 $searchTerm5 = '123'; // 文字列型 84 $key5_strict = array_search($searchTerm5, $users, true); 85 86 if ($key5_strict !== false) { 87 echo "厳密モード: 値 '{$searchTerm5}' (文字列) はキー '{$key5_strict}' で見つかりました。\n"; 88 } else { 89 echo "厳密モード: 値 '{$searchTerm5}' (文字列) は見つかりませんでした。\n"; 90 } 91} 92 93// 関数を実行します。 94array_search_associative_array_example();
PHPのarray_search関数は、配列の中から特定の値を検索し、その値に対応するキー(添字)を見つける際に使用します。
この関数は3つの引数を取ります。最初の$needleは検索したい値、次の$haystackは検索対象となる配列です。最後の$strictはオプションの引数で、デフォルトはfalseです。$strictがfalseの場合、値の比較時に型を考慮しません。trueに設定すると、値と型の両方が一致する場合にのみ見つけます。値が見つかるとそのキー(添字)を返し、見つからなかった場合はfalseを返します。このfalseという戻り値は、他の有効なキー(0など)と区別するために、厳密な比較(!== false)で確認することが推奨されます。
サンプルコードでは、ユーザー名と対応する表示名を持つ連想配列$usersを用いています。例えば、存在する値'Jane Smith'を検索すると、そのキー'jane_smith'が返されます。存在しない値'Mike Davis'を検索した場合はfalseが返されます。
特に$strict引数は重要で、例えば文字列'123'と数値123のように、値は同じでも型が異なる場合を区別できます。デフォルトの非厳密モードではこれらを同じと見なしますが、厳密モード($strict = true)では型が異なるため一致しないと判断され、より正確な検索が可能です。これにより、意図しないマッチングを防ぐことができます。
array_search関数は、配列から指定した値を探し、最初に見つかったそのキーを返します。値が見つからない場合はfalseを返します。このfalseという戻り値は、キーが0である場合と区別するため、検索結果の判定には=== falseまたは!== falseのような厳密な比較を用いることが重要です。
第三引数のstrictは、値の比較時にデータ型も考慮するかどうかを制御します。デフォルトのfalse(非厳密)の場合、123(数値)と'123'(文字列)のように型が異なっても値が等しければ同じものと見なされることがあります。trueを指定すると、値と型の両方が完全に一致する場合のみ見つかったと判定します。意図しない検索結果を避けるため、特に異なる型の値が混在する可能性がある場合は、strict引数をtrueに設定することを検討しましょう。