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

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

投稿日:

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

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

本記事は執筆時点(2024年07月02日)の情報をベースにしております。掲載している情報が最新ではない可能性がありますので何卒ご容赦ください。

広告
広告

array_keys

LaravelでのWebアプリ制作の実務において、PHPで多次元連想配列から値の抽出を行う状況があり、その際array_keys関数について学んだので、覚えた内容を備忘録として残しておきます。

(※array_keys関数について完全に理解できている訳ではないので、説明が至らない部分があることをご容赦ください。)

PHPのarray_keys関数は対象の配列からすべてのキー、もしくは特定の値を持つキーを取得して新しい配列として返してくれる関数です。

基本的には下記のように引数に配列と検索する値をセットして使用します。

array_keysの書き方

添字配列に使用する

第二引数以降は省略可能ですが、添字配列に使用してもインデックス番号が丸々返って来るだけなので、ここでは第二引数を指定したパターンを確認してみます。

array_keysでは第二引数に指定した値を持つキーのみを抽出することができます。このとき第三引数にtrueを指定すると型が一致しているかまで判定します。

下の例では配列の中から「orange」の位置を検索しています。

PHP

$arr = ['apple','orange','lemon','orange','tomato','poteto','cherry'];
$keys = array_keys($arr,'orange');
var_dump($keys);
/*結果
array(2) {
    [0]=>
    int(1)
    [1]=>
    int(3)
  }
*/

3行目「orange」は配列内に2つ存在するので、2つのインデックス番号が新しい配列に入って返ってきます。

連想配列に使用する

連想配列の場合はキーのみを全て取得したいという状況もあるので、第二引数を省略したパターンも確認してみます。

下の例のようにキーのみを格納した新しい配列を作成できます。

PHP

$arr = ['東京太郎' => 'man', '埼玉次郎' => 'man', '千葉花子' => 'woman', '神奈川一郎' => 'man', '茨城春子' => 'woman'];
$keys = array_keys($arr);
var_dump($keys);
/*結果
array(5) {
    [0]=>
    string(12) "東京太郎"
    [1]=>
    string(12) "埼玉次郎"
    [2]=>
    string(12) "千葉花子"
    [3]=>
    string(15) "神奈川一郎"
    [4]=>
    string(12) "茨城春子"
  }
*/

続いては、先ほど同様に第二引数を設定して値を持つキーを抽出してみます。

値が「man」であるキーだけが新しい配列に格納されます。

PHP

$arr = ['東京太郎' => 'man', '埼玉次郎' => 'man', '千葉花子' => 'woman', '神奈川一郎' => 'man', '茨城春子' => 'woman'];
$keys = array_keys($arr,'man');
var_dump($keys);
/*結果
array(3) {
    [0]=>
    string(12) "東京太郎"
    [1]=>
    string(12) "埼玉次郎"
    [2]=>
    string(15) "神奈川一郎"
  }
*/

多次元連想配列に使用する

データベースのテーブルから渡されたデータは多次元連想配列になっていることが多いと思います。

そこで今度はarray_keysを使って、多次元連想配列から特定のカラムに指定した値を持つレコードを全て取り出してみます。

このケースでは、はじめにarray_column関数を利用して特定のカラムの値のみを抽出した配列を用意し、その配列に対してarray_keysで該当するインデックスを取得、このインデックス番号で元の配列から任意のレコードを取り出すという流れになります。

下の例では「age」が「48」のレコードを取り出してみます。

PHP

$arr = [
    ['id' => 1, 'name' => '東京太郎', 'age' =>'24', 'furigana' => 'トウキョウタロウ'],
    ['id' => 2, 'name' => '埼玉次郎', 'age' =>'48', 'furigana' => 'サイタマジロウ'],
    ['id' => 3, 'name' => '千葉花子', 'age' =>'21', 'furigana' => 'チバハナコ'],
    ['id' => 4, 'name' => '神奈川一郎', 'age' =>'48', 'furigana' => 'カナガワイチロウ'],
    ['id' => 5, 'name' => '茨城春子', 'age' =>'32', 'furigana' => 'イバラキハルコ'],
    ['id' => 6, 'name' => '栃木三郎', 'age' =>'48', 'furigana' => 'トチギサブロウ'],
];

$col = array_column($arr,'age');
$keys = array_keys($col,'48');

for($n = 0; $n < count($keys); $n++){
    $index = $keys[$n];
    echo $arr[$index]['name'] . "<br>";
}
//結果:
埼玉次郎
神奈川一郎
栃木三郎

10行目array_column関数を使って元の多次元連想配列の「age」キー値のみを取り出し、新しい配列を生成しています。

11行目「age」の値を収めた配列に対しarray_keysを使います。調べたい値「48」を持つインデックスが返ってきます。

13行目array_keysの戻り値の数だけループで処理を行い、元の配列からマッチしたレコードを取り出しています。

15行目「age」が「48」である「埼玉次郎」「神奈川一郎」「栃木三郎」のみ表示されます。

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

array_searchとの違い

array_search関数は、PHPの配列内から特定の値を検索し、その値のキーを返す関数です。

array_keysもarray_searchも配列内の特定の値の位置を検索できる関数ですが、両者には戻り値に大きな違いがあります。

  • array_keysは検索した値を持つキーを配列で返す
  • array_searchは検索した値を持つキーのうち、一番最初のものだけを返す

下記の例は、array_searchを使って値が「man」のものを検索した場合のものです。

array_keysの戻り値が「東京太郎」「埼玉次郎」「神奈川一郎」の3つだったのに対し、今回のarray_searchの戻り値は一番はじめにみつかった「東京太郎」の1つだけになっています。

PHP

$arr = ['東京太郎' => 'man', '埼玉次郎' => 'man', '千葉花子' => 'woman', '神奈川一郎' => 'man', '茨城春子' => 'woman'];
$search = array_search($arr,'man');
var_dump($search);//結果 string(12) "東京太郎"

結果が重複する可能性がない場合などはarray_searchで良いですが、該当する値が複数存在し、それらを全て取得したい場合はarray_keysが適していると言えます。

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

まとめ

以上が、PHPで配列から特定の値を持つキーを全て取得するarray_keys関数の使い方です。

広告
広告

関連する記事

サムネイル

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

2024年07月03日
array_searchは、配列内から特定の値を検索し、見つかった場合はその値のキー(インデックス番号)を返す関数です。該当する値が複数ある場合は、はじめに見つかったインデックス番号を返します。
サムネイル

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

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

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日
最終更新日:2024年10月02日
XAMPPをSSL化してhttpsでアクセスできるようにするには、設定ファイルの変更と証明書の作成が必要です。