公式ドキュメントarray_searchの公式ドキュメントです。PHParray_search-Manual..." /> PHPのarray_searchの使い方: 配列から値を探しキーを返す

ユーニックス総合研究所

  • home
  • archives
  • php-array-search

PHPのarray_searchの使い方: 配列から値を探しキーを返す

  • 作成日: 2020-09-01
  • 更新日: 2023-12-24
  • カテゴリ: PHP

PHPのarray_search

PHPには、配列から指定した値を検索し、見つかったらその値のキーを返す関数array_searchがあります。
array_searchは↓のように使います。

<?php  

$arr = ['cat', 'dog', 'bird'];  

$key = array_search('dog', $arr);  

echo "key: $key\n";  
echo "found value: ", $arr[$key], "\n";  

?>  

公式ドキュメント

array_searchの公式ドキュメントです。

PHPの対応バージョン

array_searchは↓のPHPのバージョンに対応しています。

  • PHP 4 >= 4.0.5
  • PHP 5
  • PHP 7

array_searchの構造

array_searchは↓のような構造を持っています。

array_search ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : mixed  

$needle

第1引数の$needleが探す値です。

$haystack

第2引数の$haystackは走査対象の配列です。

$strict

第3引数の$strictTRUEにすると、array_searchは厳密な型比較を行います。

返り値

値が見つかった場合はそれに対応するキー、見つからなかった場合はFALSEを返します。
また、PHP 5.3.0以降から無効な引数を渡されたときはNULLを返すようになりました。

普通の配列から値を探す

普通の配列から値を探す場合は↓のようにします。

<?php  

$arr = ['cat', 'dog', 'bird'];  

$key = array_search('dog', $arr);  

echo "key: $key\n";  
echo "found value: ", $arr[$key], "\n";  

?>  

出力結果。

key: 1  
found value: dog  

配列$arrからdogの値を探しています。
dogは配列のインデックスでは1番目の要素なので、返ってくるキーは1になります。
そのキーと配列を使って見つかった値を表示しています。

連想配列から値を探す

連想配列から値を探す場合も使い方は同じです。

<?php  

$arr = [  
    'cat' => 'nyan',  
    'dog' => 'wan',   
    'bird' => 'kii',  
];  

$key = array_search('wan', $arr);  

echo "key: $key\n";  
echo "found value: ", $arr[$key], "\n";  

?>  

出力結果。

key: dog  
found value: wan  

array_searchは値に対応するキーを返します。値ではないので注意しましょう。

厳密な型比較を行う

たとえば↓のようなコードの場合、最初に見つかる値のキーは0になります。
これは厳密な型比較を行っておらず、文字列と数値の区別がされていないためです。
つまり'1'0番目の要素1にヒットしています。

<?php  

$arr = [1, '1', 2];  

$key = array_search('1', $arr);  

echo "key: $key\n";  
echo "found value: ", $arr[$key], "\n";  

?>  

出力結果。

key: 0  
found value: 1  

array_searchの第3引数をTRUEにするとarray_searchは厳密な型比較を行います。
よって↓のコードは配列の1番目の要素'1'にヒットします。

<?php  

$arr = [1, '1', 2];  

$key = array_search('1', $arr, TRUE);  

echo "key: $key\n";  
echo "found value: ", $arr[$key], "\n";  

?>  

出力結果。

key: 1  
found value: 1  

値が見つからなかった場合の挙動

array_searchは指定した値が配列内で見つからなかった場合、FALSEを返します。

<?php  

$arr = ['cat', 'dog', 'bird'];  

$key = array_search('pig', $arr);  

echo "key type: ", gettype($key), "\n";  
echo "key value: ", var_export($key), "\n";  

?>  

出力結果。

key type: boolean  
key value: false  

不正な引数だった時の挙動

第2引数がNULLだったりするとarray_searchは警告を出してNULLを返します。

<?php  

$key = array_search(NULL, NULL);  

echo "key type: ", gettype($key), "\n";  
echo "key value: ", var_export($key), "\n";  

?>  
PHP Warning:  array_search() expects parameter 2 to be array, null given in sample.php on line 3  
key type: NULL  
key value: NULL  

使用例

array_searchの使用例です。

標準入力からキーを読み込み配列を走査する

標準からキーを読み込み、配列内に値が存在しなければ配列に値を追加し、配列内に値が存在する場合はその値を取得して表示します。

<?php  

$arr = [];  

for (;;) {  
    echo "value: ";  
    $line = fgets(STDIN);  
    $value = trim($line);  

    $found_key = array_search($value, $arr);  
    if ($found_key !== false) {  
        echo "found: ", $arr[$found_key], "\n";  
    } else {  
        $arr[] = $value;  
        echo "store: $value\n";  
    }  
}  

?>  

出力結果。

value: cat  
store: cat  
value: cat  
found: cat  
value: dog  
store: dog  
value: dog  
found: dog  
value: ^C  

問題

Q1: array_searchの第2引数として適当なものを答えよ

  1. 文字列
  2. 配列
  3. 関数

Q2: array_searchで厳密な型比較を行う場合の処置として適当なものを答えよ

  1. 第1引数にTRUEを渡す
  2. 第2引数にTRUEを渡す
  3. 第3引数にTRUEを渡す

Q3: array_searchに渡す引数が不正だった場合、array_searchはどんな返り値を返すか

  1. FALSE
  2. TRUE
  3. NULL

正解

Q1: 2
Q2: 3
Q3: 3