【PHP】配列から指定した値を検索し、キー番号を返す関数「array_search()」
今回は配列内から指定した値を検索し、キー番号を返す関数、「array_search()」をメモします。
非常に便利な関数なので色々な使い方ができそうですね。
目次
配列から指定した値を検索し、キー番号を返す関数「array_search()」
1 |
array_search(検索する値,配列[,true or false(検索する値の型検査)]); |
それではサンプルコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php //array_search(検索する値,配列[,true or false(検索する値の型検査)]); $array = array("a","b","c","d","e"); $keynumber = array_search("c",$array); echo $keynumber; //実行結果 2 ?> |
array_search() の注意点
最初に現れた検査対象しか出力しない
とても便利な関数、「array_search()」ですが、幾つか注意点があり、まず念頭に置いておきたいことが、「検索した値が一番最初に出現したインデックスキーを返す関数」であるということです。次のサンプルコードで確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php //array_search(検索する値,配列[,true or false(検索する値の型検査)]); $array = array("a","b","c","b","c"); $keynumber = array_search("c",$array); echo $keynumber; //実行結果 2 ?> |
配列内には検索対象である「”c”」が二つ存在します。それぞれインデックスキーが「2」と「5」ですが、実行結果では最初に出現した「2」が出力されています。
第3引数には「true」を入れることを推奨
それからもう一つ注意点があり、検索する値が「文字列の数値」だったり「0」だったりする場合、第3引数には「true」を入れたほうがいいということです。サンプルコードで確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php //array_search(検索する値,配列[,true or false(検索する値の型検査)]); $array = array("a","b","c","b",1); $keynumber = array_search(1,$array); echo $keynumber; //実行結果 0 ?> |
今回検索するのは数値(int)型の「1」です。配列内には「1」はインデックスキー「4」に存在します。しかし実行結果ではなぜかインデックスキー「0」と出力されています。
これはなぜかというと、型の検査を行わない場合、数値と文字列を比較した時に文字列が「0」に変換されて比較されてしまう為に起きる現象です。
最初に現れた文字列「”a”」が「0」と変換されて検索に引っかかってしまったために、「”a”」のインデックスキー「0」が出力されてしまったのです。
これを回避するために、第3引数に「true」をいれ、型検査も行います。
1 2 3 4 5 6 7 8 9 10 11 |
<?php //array_search(検索する値,配列[,true or false(検索する値の型検査)]); $array = array("a","b","c","b",1); $keynumber = array_search(1,$array,true); echo $keynumber; //実行結果 4 ?> |
期待通り「4」が出力されました。特別な理由がない限り、第3引数には「true」を入れることを心がけましょう。
まとめ
- 「array_search()」は検査した値が配列内にあれば、そのインデックスキーを返す関数である
- 配列内に検査対象が複数あっても、最初に現れた検査対象のインデックスキーしか返さない
- 第3引数に「true」を設定することが推奨