• HOME > 
  • PHP > 
  • PHPで配列内を検索してインデックス番号を取得する【arra...

PHPで配列内を検索してインデックス番号を取得する【array_search関数】

投稿日:

このページにはGoogleアドセンス広告とアフィリエイト広告が含まれています。

カテゴリー記事のアイキャッチ画像
広告
広告

array_search関数とは?

PHPのarray_search関数について学んだことを備忘録としてまとめます。(勉強中につき、間違って理解している部分もあるかもしれませんのでご容赦ください)

array_searchは、配列内から特定の値を検索し、見つかった場合はその値のキー(インデックス番号)を返す関数です。

array_searchの書き方
  • 添字配列に使用した場合、検索した値のインデックス番号を返します。
  • 該当する値が複数ある場合は、はじめに見つかったインデックス番号を返します。
  • 連想配列を検索した場合、見つかった値のキーを返します。

下の例では、配列の中から「orange」という値を検索しています。

添字配列なのでインデックス番号が返ってきます(配列は先頭が0なので、この場合は1を返す)。

配列内に「orange」は2つありますが、array_searchが返すのははじめの一つだけです。

PHP

$arr = ['apple','orange','lemon','orange','tomato','poteto','cherry'];
$index = array_search('orange',$arr);
var_dump($index);//結果は「1」

第三引数を指定して型も一致させる

array_searchは第三引数にtrueを設定することで、型が一致しているかどうかまでチェックできます。

第三引数は省略が可能ですが、その場合は型を無視して検索されるので使用する状況によっては注意が必要です。

下の例では数値の「35」を検索しているので完全に一致しているキーは「神奈川一郎」のはずですが、第三引数を省略しているので文字列の「35」も一致しているとみなされ、そのキーである「埼玉次郎」を返しています。

PHP

$arr = ['東京太郎' => '24', '埼玉次郎' => '35', '千葉花子' => 21, '神奈川一郎' => 35];
$key = array_search(35,$arr);
var_dump($key);//結果は「埼玉次郎」

今度は第三引数にtrueを加えて、型も一致するようにします。

数値の「35」を持つキー「神奈川一郎」が返ってきます。

PHP

$arr = ['東京太郎' => '24', '埼玉次郎' => '35', '千葉花子' => 21, '神奈川一郎' => 35];
$key = array_search(35,$arr,true);
var_dump($key);//結果は「神奈川一郎」

array_searchで条件分岐を作るときの注意点【0もfalseとして扱われる】

array_searchを使って一致する値が見つかった場合の処理を作るとき、条件分岐には「false」を使って次のように書きたくなります。

PHP

$arr = ['apple','orange','lemon','orange','tomato','poteto','cherry'];
$index = array_search("apple",$arr);
if($index != false){
    //一致する値が見つかった場合の処理
}else{
    //一致する値が見つからなかった場合の処理
}

この時注意しなければいけないのが、比較演算子で型まで判定させないと「0」もfalseとして扱われるということです。

上記の例では、検索している値「apple」は先頭に存在するため、返り値(インデックス番号)は「0」です。

型まで判定しないと「0」もfalseとして扱われてしまうため、「見つからなかった」という処理に進んでしまいます。

このような条件分岐を作る場合は、比較演算子を「!==」と書き、型まで判定させた方が確実なようです。。

多次元連想配列内をarray_searchで検索する

多次元連想配列に対してarray_searchで検索を掛けたい場合は、array_column関数と組み合わせて行います。

検索した値を持つレコード(行)を取得したい時に利用できます。

array_columnは多次元連想配列から特定のカラムの値のみを抽出して新しい配列を生成する関数です。

下の例では、多次元連想配列から「age」が「21」であるレコードの「name」を取得しています。

PHP

$arr = [
    ['id' => 1, 'name' => '東京太郎', 'age' =>'24', 'furigana' => 'トウキョウタロウ'],
    ['id' => 2, 'name' => '埼玉次郎', 'age' =>'35', 'furigana' => 'サイタマジロウ'],
    ['id' => 3, 'name' => '千葉花子', 'age' =>'21', 'furigana' => 'チバハナコ'],
    ['id' => 4, 'name' => '神奈川一郎', 'age' =>'48', 'furigana' => 'カナガワイチロウ'],
    ['id' => 5, 'name' => '茨城春子', 'age' =>'48', 'furigana' => 'イバラキハルコ'],
    ['id' => 6, 'name' => '栃木三郎', 'age' =>'48', 'furigana' => 'トチギサブロウ'],
];
$target_column = array_column($arr,'age');
$index = array_search('21',$target_column);
echo "arrで「age」が「21」のレコードは「" . $arr[$index]['name'] . "」です。";
//結果:arrで「age」が「21」のレコードは「千葉花子」です。

9行目多次元連想配列に対してarray_columnを使って「age」の値のみを抽出しています。

10行目array_columnで生成した配列に対してarray_searchを行い、マッチする値のインデックス番号を取得します。

11行目取得したインデックス番号を使って、元の多次元連想配列からレコードもしくは必要な値を表示させています。

array_column関数について詳しくはこちらのページをご覧ください。

in_array関数やarray_keys関数との違い

PHPには同じように配列内の検索に使用するin_arrayやarray_keysという関数もあります。

それぞれ戻り値に違いがあるのでシチュエーションに合わせた使い分けが必要です。

in_array関数

  • 配列内に特定の値が存在するかどうかを判定
  • 戻り値は、存在した場合は「true」存在しなかった場合は「false」となる
  • 検索した値のキーや位置を取得することはできない

in_arrayについて詳しくはこちらのページをご確認ください。

array_keys関数

  • 配列からすべてのキー、もしくは特定の値を持つキーを取得
  • 取得したキーを配列に入れて返す
  • 対象の配列内で該当するすべての値のキーが取得できる

array-keysについて詳しくはこちらのページをご確認ください。

まとめ

以上が、PHPのarray_search関数を使って配列内を検索してインデックス番号を取得する方法です。

データベースのデータなどPHPを扱う上で配列の検索は必須だと思いますので、array_searchを含め配列を操作する関数はぜひともマスターしておきたいところです。

広告
広告

関連する記事

サムネイル

PHPで配列内に値が存在するか判定する【in_array】

2024年07月02日
PHPのin_arrayは、配列内に特定の値が存在するかを判定して、結果をtrueかfalseで返してくれる関数です。第一引数に「調べたい値」、第二引数に「対象の配列」を指定して判定を行います。
サムネイル

PHPで配列から特定の値を持つキーを全て取得する【array……

2024年07月02日
HPのarray_keys関数は対象の配列からすべてのキー、もしくは特定の値を持つキーを取得して新しい配列として返してくれる関数です。基本的には引数に配列と検索する値をセットして使用します。
サムネイル

PHPで多次元配列の並び替え(ソート)を行う【array_m……

2024年06月13日
PHPで配列のソートを行う方法は他にもありますが、array_multisort関数を使えば、とても簡潔なコードで多次元配列を任意の条件・順序で並び替えを行うことができます。
サムネイル

PHPで配列の最小値や最大値を取得する【minとmax】

2024年06月13日
PHPのmin関数とmax関数はそれぞれ配列の最小値と最大値を取得できる関数です。引数に対象の配列を指定すると最小値や最大値を返します。
サムネイル

PHPで多次元配列から特定のカラムの値を取得する【array……

2024年05月29日
PHPのarray_columnは多次元配列の中から指定したカラムの値のみを抽出することができる関数です。抽出した値は新しい配列に格納されて返ってきます。
サムネイル

XAMPPでSSLを有効にする方法【httpsでアクセスでき……

2024年04月12日
XAMPPをSSL化してhttpsでアクセスできるようにするには、設定ファイルの変更と証明書の作成が必要です。