【PHP】配列から指定した値を検索し、キー番号を返す関数「array_search()」

Pocket

今回は配列内から指定した値を検索し、キー番号を返す関数、「array_search()」をメモします。
非常に便利な関数なので色々な使い方ができそうですね。

配列から指定した値を検索し、キー番号を返す関数「array_search()」

第1引数に「検索したい値」、第2引数に「検査したい配列」、第3引数は省略できますが、「true」を入れると「検査する値の型検査」を行います。
それではサンプルコードを見てみましょう。
今回は「”c”」という文字列を検索して、そのインデックスキーを変数に格納、echo で出力しています。今回は「2」が出力できましたね。

 

array_search() の注意点

最初に現れた検査対象しか出力しない

とても便利な関数、「array_search()」ですが、幾つか注意点があり、まず念頭に置いておきたいことが、「検索した値が一番最初に出現したインデックスキーを返す関数」であるということです。次のサンプルコードで確認してみましょう。

 

配列内には検索対象である「”c”」が二つ存在します。それぞれインデックスキーが「2」と「5」ですが、実行結果では最初に出現した「2」が出力されています。

第3引数には「true」を入れることを推奨

それからもう一つ注意点があり、検索する値が「文字列の数値」だったり「0」だったりする場合、第3引数には「true」を入れたほうがいいということです。サンプルコードで確認してみます。

 

今回検索するのは数値(int)型の「1」です。配列内には「1」はインデックスキー「4」に存在します。しかし実行結果ではなぜかインデックスキー「0」と出力されています。
これはなぜかというと、型の検査を行わない場合、数値と文字列を比較した時に文字列が「0」に変換されて比較されてしまう為に起きる現象です。
最初に現れた文字列「”a”」が「0」と変換されて検索に引っかかってしまったために、「”a”」のインデックスキー「0」が出力されてしまったのです。
これを回避するために、第3引数に「true」をいれ、型検査も行います。

期待通り「4」が出力されました。特別な理由がない限り、第3引数には「true」を入れることを心がけましょう。

まとめ

  • 「array_search()」は検査した値が配列内にあれば、そのインデックスキーを返す関数である
  • 配列内に検査対象が複数あっても、最初に現れた検査対象のインデックスキーしか返さない
  • 第3引数に「true」を設定することが推奨

 

エッグ

シェアする

コメントを残す

メールアドレスが公開されることはありません。

コメントする