・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2022年7月27日に投稿されました。)
PHPで配列や連想配列内を検索する関数として、array_search()があります。
array_search()とは指定した配列から値を検索する関数になります。
例えば、「[‘a’, ‘b’, ‘c’]」という配列にarray_search()を使って「c」という値があるかどうかを検索すると「2」が表示されます。
また、格納されていない値を指定して使用すると、何も返されず空となります。
つまり、array_search()は、検索した値の配列のキーを返り値として返すようになります。
そして、array_search()は配列に対応した関数であるため、連想配列にも使用できたり、2次元配列や3次元配列のような多次元配列にも使用できたりします。
以上のことから、配列に格納されている値によって処理を変えたい場合や、指定した値が配列のどこにあるか知りたい場合にはarray_search()を使用しましょう。
今回はPHPのarray_search()で配列や連想配列から指定した値を検索する方法について紹介していきます。
・PHPで指定した値が配列や連想配列のどの位置にあるのか知りたい人
array_search()とは
冒頭でも言いましたが、array_search()とは指定した配列から値を検索する関数となります。
値を検索することから、指定した配列にある値の「キー」を返り値として返すようになります。
array_search()の書き方
array_search()の書き方は下記のようになります。
1 | <?php array_search('検索す値', '対象の配列' [, '厳密な比較']); ?> |
array_search()は2つの必須パラメータを指定することで使用することができます。
また、任意パラメータを1つ指定することができるので、最大で3つのパラメータを指定することができます。
array_search()のパラメータ
array_search()のパラメータは下記のようになります。
- 検索する値(必須):
配列内で検索したい値を指定する - 対象の配列(必須):
検索する配列を指定する - 厳密な比較(任意):
値の型までチェックするかどうかをTRUE/FALSEで指定する
(デフォルトはFALSE)
array_search()は必須なパラメータとして「検索する値」と「検索対象の配列」を指定します。
そして、任意となりますが、「厳密な比較」を行うかどうかをTRUE/FLASEで指定します。
array_search()で配列から指定した値を検索するサンプルコード
array_search()で配列から指定した値を検索するサンプルコードをご紹介します。
ここでは、下記の4つの場合でarray_search()を使用してみます。
- 検索する値が配列に存在する場合
- 検索する値が配列に存在しない場合
- 検索する値が配列に重複する場合
- 値は同じでも型の違う値が配列に存在する場合
検索する値が配列に存在する場合
検索する値が配列に存在する場合に、array_search()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php echo '⚫︎ 対象の配列'; $metro = ['東京', '銀座', '御茶ノ水', '新宿', '荻窪']; print_r($metro); echo '⚫︎ 検索する値'; $val = '御茶ノ水'; echo $val; echo '⚫︎ array_search()使用後'; $metro_serarch = array_search($val, $metro); echo $metro_serarch; ?> |
実行結果
検索する値が配列に存在する場合にarray_search()を使用すると、配列のキーを返すようになります。
そのため、検索した「御茶ノ水」のキーである「2」が表示されています。
検索する値が配列に存在しない場合
検索する値が配列に存在しない場合に、array_search()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php echo '⚫︎ 対象の配列'; $metro = ['東京', '銀座', '御茶ノ水', '新宿', '荻窪']; print_r($metro); echo '⚫︎ 検索する値'; $val = '原宿'; echo $val; echo '⚫︎ array_search()使用後'; $metro_serarch = array_search($val, $metro); echo $metro_serarch; ?> |
実行結果
検索する値が配列に存在しない場合にarray_search()を使用するとキーは返されません。
そのため、検索した「原宿」は配列に見つからず、空が表示されています。
検索する値が配列に重複する場合
検索する値が配列に重複する場合に、array_search()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php echo '⚫︎ 対象の配列'; $metro = ['東京', '銀座', '御茶ノ水', '新宿', '荻窪', '銀座']; print_r($metro); echo '⚫︎ 検索する値'; $val = '銀座'; echo $val; echo '⚫︎ array_search()使用後'; $metro_serarch = array_search($val, $metro); echo $metro_serarch; ?> |
実行結果
検索する値が配列に重複する場合に、array_search()を使用すると最初に出てきた値のキーを返すようになります。
そのため、配列一番初めに出てきた「銀座」のキーである「1」が表示されています。
値は同じでも型の違う値が配列に存在する場合
値は同じでも型の違う値が配列に存在する場合に、array_search()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php echo '⚫︎ 対象の配列'; $array = ['109', '488', '689', '419', '88']; print_r($array); echo '⚫︎ 検索する値'; $val = 88; echo $val; echo '⚫︎ array_search()使用後'; $metro_serarch = array_search($val, $array); print_r($metro_serarch); ?> |
実行結果
array_search()は、値が同じで型が異なっていても同じ値であると判断するようになります。
そのため、「数値型の88」を検索していますが、「文字列型の88」のキーである「4」が返されています。
array_search()で厳密な比較を行って配列から指定した値を検索する場合
array_search()で厳密な比較を行って配列内の値を検索する場合は、3つ目のパラメータである「厳密な比較」に「TRUE」指定します。
先ほどまで、値は同じであるけれども違う型である場合に、array_search()を使用すると同じ値と満たされていました。
しかし、厳密な比較に「TRUE」を指定することで、値だけでなく型までチェックを行い、その結果から「true」か「false」を返すようになります。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php echo '⚫︎ 対象の配列'; $metro = ['東京', '488', '銀座', '419', '御茶ノ水']; print_r($metro); echo '⚫︎ 検索する値-1'; $val = 488; echo $val1; echo '⚫︎ array_search()使用後-1'; $metro_serarch1 = array_search($val1, $metro, TRUE); print_r($metro_serarch1); echo '⚫︎ 検索する値-2'; $val2 = '御茶ノ水'; echo $val2; echo '⚫︎ array_search()使用後-2'; $metro_serarch2 = array_search($val2, $metro, TRUE); print_r($metro_serarch2); ?> |
実行結果
array_search()の3つ目のパラメータに「TRUE」を指定することで、厳密な比較が行われています。
そのため、「御茶ノ水」は配列に見つかったのでキーである「4」が返されますが、「数値型の488」は配列に見つからないため、空が返されています。
array_search()で連想配列から指定した値を検索するサンプルコード
array_search()で連想配列から指定した値を検索するサンプルコードをご紹介します。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php echo '⚫︎ 対象の連想配列'; $metro = [ 'Tokyo' => '東京', 'Ginza' => '銀座', 'Ochanomizu' => '御茶ノ水', 'Shinjuku' => '新宿', 'Ogikubo' => '荻窪' ]; print_r($metro); echo '⚫︎ 検索する値-1'; $val1 = '原宿'; echo $val1; echo '⚫︎ array_search()使用後-1'; $metro_serarch = array_search($val1, $metro); print_r($metro_serarch); echo '⚫︎ 検索する値-2'; $val2 = '荻窪'; echo $val2; echo '⚫︎ array_search()使用後-2'; $metro_serarch = array_search($val2, $metro, TRUE); print_r($metro_serarch); ?> |
実行結果
array_search()によって、連想配列内の値を検索することができます。
そのため、検索した「原宿」のキーは返されませんが、「荻窪」のキーである「Ogikubo」が返されています。
array_search()で多次元配列内から指定した値を検索するサンプルコード
array_search()で多次元配列内から指定した値を検索するサンプルコードをご紹介します。
2次元配列に使用する場合
array_search()を2次元配列に使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php echo '⚫︎ 対象の配列'; $metro = [ ['東京', '秋葉原', '上野', '五反田', '品川'], ['渋谷', '原宿', '新宿', '恵比寿', '目黒'] ]; print_r($metro); echo '⚫︎ 検索する値-1'; $val1 = '神田'; echo $val1; echo '⚫︎ array_search()使用後-1'; $metro_serarch = array_search($val1, $metro); print_r($metro_serarch); echo '⚫︎ 検索する値-2'; $val2 = '新宿'; print_r($val2); echo '⚫︎ array_search()使用後-2'; $metro_serarch = array_search($val2, $metro[1]); print_r($metro_serarch); ?> |
実行結果
array_search()は、2次元配列でも値を検索することができます。
また、配列の後ろにインデックスを1つ指定することで、2次元配列内にある1次元配列の値に対して検索することができます。
3次元配列に使用する場合
array_search()を3次元配列に使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php echo '⚫︎ 対象の配列'; $metro = [ [['東京', '秋葉原', '上野', '五反田'],['渋谷', '原宿', '新宿', '恵比寿']], [['池袋', '大塚', '大崎', '品川'],['神田', '田町', '高輪ゲートウェイ', '目黒']] ]; print_r($metro); echo '⚫︎ 検索する値-1'; $val = '神田'; echo $val1; echo '⚫︎ array_search()使用後-1'; $metro_serarch = array_search($val1, $metro); print_r($metro_serarch); echo '⚫︎ 検索する値-2'; $val2 = ['東京', '秋葉原', '上野', '五反田']; print_r($val2); echo '⚫︎ array_search()使用後-2'; $metro_serarch = array_search($val2, $metro[0]); print_r($metro_serarch); echo '⚫︎ 検索する値-3'; $val3 = '高輪ゲートウェイ'; echo $val3; echo '⚫︎ array_search()使用後-3'; $metro_serarch = array_search($val3, $metro[1][1], TRUE); print_r($metro_serarch); ?> |
実行結果
array_search()は3次元配列でも値を検索することができます。
そして、配列の後ろにインデックス1つを指定することで3次元配列内にある2次元配列の値に対して、インデックス2つを指定することで3次元配列内にある1次元配列の値に対して検索することができます。
配列や連想配列で検索した値があるかないかを真偽値で返す場合
配列や連想配列で検索した値があるかないかを真偽値で返す場合は、in_array()を使用します。
in_array()は指定した値が配列の要素に存在するかどうかをチェックする関数となります。
そのため、指定した値が見つかった場合は「true」を、見つからなかった場合は「false」が返り値として返されます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php echo '⚫︎ 対象の配列'; $metro = ['東京', '銀座', '御茶ノ水', '新宿', '荻窪']; print_r($metro); echo '⚫︎ 検索する値-1'; $val1 = '新宿'; echo $val1; echo '⚫︎ in_array()使用後-1'; $metoro_in1 = in_array($val1, $metro); var_dump($metoro_in1); echo '⚫︎ 検索する値-2'; $val2 = '西日暮里'; echo $val2; echo '⚫︎ in_array()使用後-2'; $metoro_in2 = in_array($val2, $metro); var_dump($metoro_in2); ?> |
実行結果
in_array()によって配列内の値を検索し、検索した結果として真偽値が返されています。
そのため、「新宿」は配列に存在するので「true」を、「西日暮里」は配列に存在しないので「false」が表示されています。
もし、in_array()について詳しく知りたい場合は下記の記事をご参考ください。
まとめ
⚫︎ array_search()とは指定した配列から値を検索する関数である
⚫︎ array_search()を使用するには1つのパラメータが必須となる
・ 検索する値(必須)
・ 対象の配列(必須)
・ 厳密な比較(任意)
⚫︎ 検索する値が配列に存在する場合にarray_search()を使用すると、値のキーが返される
⚫︎ 検索する値が配列に存在しない場合にarray_search()を使用すると、何も返されない
⚫︎ 検索する値が配列に重複する場合にarray_search()を使用すると、初めに格納されている値のキーが返される
⚫︎ 値は同じでも型の違う値が配列に存在する場合にarray_search()を使用すると、同じ値と判断されてキーが返される
⚫︎ array_search()で厳密な比較を行って配列内の値を検索するには、第3パラメータに「TRUE」を指定する
⚫︎ array_search()は連想配列内の値を検索することができる
⚫︎ array_search()は多次元配列内の値を検索することができる
⚫︎ 配列や連想配列で検索した値があるかないかを真偽値で返す場合は、in_array()を使用する