PHPでarray_keys関数をマスターして配列を効果的に使おう

PHPでは配列を使った便利な機能がたくさんあります。その中で今回は配列のキーを取得するarray_keys関数について解説します。

PHP初学者からすれば、array_keys関数は連想配列のキー一覧を取得する関数として認知されていると思います。もちろん連想配列のキー一覧を取得するための関数ではありますが、それはarray_keys関数の持つ能力の一部でしかありません。使い方次第でプログラムの効率は格段に上がるものなので、ぜひarray_keys関数についてマスターしましょう。

array_keys関数の基本

まずは、array_keys関数の基本についてです。キーを取得するための関数なので主に連想配列で使うものですが通常の配列でもちゃんと機能します。通常の配列と連想配列それぞれの挙動を押さえておきましょう。

通常の配列の場合

以下が通常の配列の例です。$memberという5人の名前を有した配列からarray_keys関数でキーを出力してみます。

 

結果は以下のとおりです。通常の配列ではキーは存在しないものの要素番号(インデックス)を得ることができます。

 

連想配列の場合

次に連想配列についてです。以下のように名前をキーに、そこに付与した数値(年齢のつもりです)を値としています。これをarray_keys関数でキーを出力してみましょう。

 

結果はご覧の通りです。キーである各名前が出力されました。

 

以上がarray_keys関数の基本的な使い方になります。

特定の値を持ったキーだけを取得する方法

array_keys関数の面白い機能として、特定の値を持ったキーを取得できます。

例えば、以下の連想配列の中から33歳の人のみ抽出したい場合は、第二引数にその値(以下の例では33)を指定することができます。

 

ご覧の通り33歳の人のみが抽出できました。

 

この機能で1点注意いただきたいのが、値が”33″と文字列であってもヒットしてしまうという点です。以下のように33という数値を持っているのは厳密には山田太郎さんしかいません。池田花子さんは”33″という文字列です。

 

しかし、結果はどちらもヒットしてしまいます。文字列”33″も自動で数値変換してしまうからです。

 

これを区別したい場合は、第三引数にtrueを指定します。

 

これによって数値のみを判定してくれます。

 

array_keys関数は単純にキー一覧を得るだけでなく特定の値で検索できることがおわかりいただけたでしょうか。

 

多次元配列でarray_keys関数の使いどころ

次に多次元配列での使い方について触れていきたいと思います。

以下のようにキーを名前に、値に配列を持った多次元配列を使ったarray_keys関数の使いどころを紹介します。

 

単純にarray_keys関数でキーを出力すると以下の結果となります。

 

array_keys関数を用いてforeachで順にキーを取得し、そのキーに紐付いている値(配列)をまたarray_keys関数で順に抽出していくプログラムを作りました。

 

結果は以下の通りです。array_keys関数を使うことによって多次元配列のような複雑なデータも簡単に処理できるわけです。

 

(実践)郵便番号から住所を検索するプログラムを作ろう

最後にもう少し実践的な使い方について紹介したいと思います。

それは、Webフォームなどでよく見かける郵便番号から住所を自動で取得するプログラムです。住所と郵便番号を有した連想配列からarray_keys関数で郵便番号から住所を高速に検索するプログラムを作ることができます。

まず住所データですが、日本郵政の公式サイトから郵便番号データをダウンロードしました。以下のようなデータ構造になっています。3列目(赤枠)が郵便番号でこれをキーにします。また、6〜8列目(青枠)を連結して1つの住所データにして連想配列の値とします。

 

こちらが郵便番号から住所を検索するソースコードになります。前段でCSVファイルを読み込んで連想配列化しています。その後に郵便番号の入力を促し入力された郵便番号から住所を検索という流れになっています。細かいところはコメントで解説を入れているので参考にしてください。

 

以下は実行例です。郵便番号を入力すると住所が現れます。0入力で処理が終わります。

 

あくまで一例ですが、こんな使い方もあるということをわかっていただけたと思います。

まとめ

いかがでしょうか。配列のキーを取得するarray_keys関数の基本から応用編として検索機能について解説しました。

単純な連想配列のキー一覧の取得だけでなく検索機能もあることで様々な使いみちを思い浮かべたのではないでしょうか。

ぜひマスターしてプログラム開発に役立ててください。

 

 

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?