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引数の$strict
をTRUE
にすると、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引数として適当なものを答えよ
- 文字列
- 配列
- 関数
Q2: array_search
で厳密な型比較を行う場合の処置として適当なものを答えよ
- 第1引数にTRUEを渡す
- 第2引数にTRUEを渡す
- 第3引数にTRUEを渡す
Q3: array_search
に渡す引数が不正だった場合、array_search
はどんな返り値を返すか
- FALSE
- TRUE
- NULL
正解
Q1: 2
Q2: 3
Q3: 3