以前投稿した配列の解説記事で、配列は「0から始まる番号で管理する箱」だと説明しました。しかし、現実はそう単純ではありません。
想像してください。あなたの友人の電話番号を探すとき、電話帳の「0番目」や「5番目」を探しますか?
探しません。「名前」で探すはずです。
「出席番号14番」と言われても、誰の顔も浮かびません。しかし「田中」と言われれば、あのメガネの顔が浮かびます。
数字での管理には限界があります。人間は、意味のない数字を覚えるのが苦手な生き物です。
そこで登場するのが「連想配列」です。
これは、無機質な番号の代わりに「好きなラベル(キー)」を貼ってデータを管理する、人間に優しい収納術です。
構造:番号ではなく「キー」で紐付ける
普通の配列(インデックス配列)は、データを入れると勝手に「0, 1, 2…」と番号が振られました。
連想配列では、この番号を自分で決められます。しかも数字である必要はありません。「name」でも「email」でも「hp」でも、好きな文字を使えます。
- キー(Key): ラベル、名札。データを取り出すための合言葉。
- 値(Value): 箱の中身。実際のデータ。
この2つをペアにして保存します。
書き方:矢印(=>)で指名する
PHPで連想配列を作るときは、象徴的な記号が登場します。
=> です。
「ダブルアロー」などという偉そうな名前がありますが、ただの「矢印」です。
「キー(ラベル)は、この値を指しているぞ」という意味です。
$user = [
"name" => "田中",
"age" => 25,
"job" => "勇者"
];Code language: PHP (php)
見てください。この圧倒的な分かりやすさ。
「0番目が田中」ではなく、「nameは田中」と書いてある。
連想配列に慣れれば、コードを読んだだけでそこに何が入っているかが一目瞭然です。
ちなみに、最後の項目の後ろにもカンマをつけておくと、後で項目を足すときにエラーにならず便利です。以下のように、連想配列の最後の要素にもカンマを足しておけばOKです。
$user = [
"name" => "田中",
"age" => 25,
"job" => "勇者", // カンマを入れておくと、後で行コピーするときに便利
];Code language: PHP (php)
プロジェクトのコーディング規約でルールになっているのであれば、それに従うのがいいでしょう。
取り出し方:ラベルを指定して開ける
データを取り出すときも、番号を数える必要はありません。
設定したキー(ラベル)を指定するだけです。
echo $user["name"]; // 結果:田中
echo $user["job"]; // 結果:勇者Code language: PHP (php)
もしこれを普通の配列でやろうとしたら、「えーっと、名前は0番目で、職業は2番目だから…」と指折り数える羽目になります。
連想配列なら、順番が変わっても関係ありません。「job」というラベルがついている限り、どこにあっても「勇者」を取り出せます。
使い所:データベースとの相性が抜群
Webシステム開発の現場では、普通の配列よりも連想配列の方が出番が多いです。
なぜなら、データベースから取得したデータは、基本的にこの形式だからです。
会員サイトを作るとします。
一般的にデータベースには「ID」「価格」「在庫」といった項目が作られているかと思います。これらをプログラムで扱うとき、連想配列ならそのままのラベルで扱えます。
// データベースから取ってきた情報のイメージ
$product = [
"id" => 105, // ID
"price" => 3000, // 価格
"stock" => 0 // 在庫
];Code language: PHP (php)
「price」を見れば価格だとわかる。「stock」が0なら在庫切れだとわかる。
コード自体が説明書になります。
まとめ:意味のあるデータを作れ
普通の配列は「リスト(一覧)」を作るのに向いています。
連想配列は「オブジェクト(物の詳細)」を表現するのに向いています。
- 普通の配列:
["田中", "佐藤", "鈴木"](ただの並び) - 連想配列:
["name" => "田中", "height" => 170](田中の詳細スペック)
「0番目」や「1番目」といった機械的なルールに縛られるのはやめましょう。
データに名前(キー)を与え、人間が理解できる状態で管理する。それがバグを減らし、未来の自分を助けることになります。
次回は、この配列をさらに便利に回す「foreach文」について、在庫処分のセールに例えて解説します。


コメント