【PHP】連想配列 – 文字列をキーにして値を記憶する

配列はキーに文字列を使うことができ、そのような配列を連想配列と呼びます。

ここでは、連想配列について解説します。

配列については次の記事をご覧ください。

★ 内容

  • 連想配列

連想配列とは

連想配列とは配列のキーに文字列を使った配列です。

基本構文

数値をキー(インデックス)とした配列と同様で、宣言、初期化、値の記憶、値の取得があります。
基本構文もキーを文字列とすること以外は同じになります。

宣言

変数 = array()
変数 = []

初期化

変数 = [
    キー1 => 値1,
    キー2 => 値2,
    キー3 => 値3,
];

ダブルアロー演算子(=>)を使用してキーと値をセットで記述します。

値の記憶

変数[キー] = 値

値の取得

変数[キー]

サンプルコード

プロフィールを記憶する連想配列のサンプルコードをご覧ください。

ソースコード

<?php

// 連想配列の宣言(初期化)
$profile = [
    'name' => 'Watanabe You',
    'birthday' => '4/17',
    'height' => 157,
];

// 値の取得と出力
echo $profile['name']."\n";
echo $profile['birthday']."\n";
echo $profile['height']."\n";

// 既存キーに値を代入
$profile['height'] = 160;
// 値の取得と出力
echo $profile['height']."\n";

// 新規キーで値を代入
$profile['hobby'] = 'Muscle training';
// 値の取得と出力
echo $profile['hobby']."\n";

?>

実行結果

Watanabe You
4/17
157
160
Muscle training

各コードの概要は次のようになります。

行数概要
4~8連想配列の宣言と初期化
11~13連想配列の値を全て出力
16連想配列のキーが'height'の値を再代入
18連想配列のキーが'height'の値を出力
21連想配列に新しいキー'hobby'で値を記憶
23連想配列のキーが'hobby'の値を出力

配列の宣言(初期化)、値の記憶、値の取得を行うコードです。
キーが数値の配列と同様に値の再代入や新しいキーで値を記憶することができます。

注意点

存在しないキーの値を取得しようとするとエラーになります。
例えばサンプルコードの23行目のキーを'age'にすると次のような実行結果になります。

実行結果

PHP Warning:  Undefined array key "age" in sample.php on line 23

Warning: Undefined array key "age" in sample.php on line 23

これは『'age'というキーは存在しない』というエラーです。
このように存在しないキーの値を取得しようとするとエラーになるので注意しましょう。

演習問題

問題1

解答例

次の実行結果になる猫の情報を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 猫の情報は連想配列を使って記憶する
  • 連想配列のキーは'name''birthday''type'とする
  • 出力は連想配列を使用する

実行結果

name     : Tama
birthday : 4/24
type     : Munchkin

問題2

解答例

次の実行結果になる犬の情報を出力するプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 犬の情報は連想配列を使って記憶する
  • 連想配列のキーは'name''birthday''type'とする
  • 出力する値のキーはコマンドライン引数で与える
  • 出力は連想配列を使用する

実行結果1

コマンドライン

php practice.php name

実行結果

name : Pochi

実行結果2

コマンドライン

php practice.php birthday

実行結果

birthday : 7/24

実行結果3

コマンドライン

php practice.php name

実行結果

type : Maltipoo

まとめ

連想配列はキーに文字列を使用した配列です。
各配列の値に名前を付けれるイメージで、処理内容にってはコードの可読性を上げることができますので、覚えておきましょう。