はじめに
今回は、PHPにおける「連想配列」について解説します。
連想配列(Associative Array) とは、簡単に説明すると
「キー(名前)」と「値」の組み合わせでデータを管理する配列のことです。
添字配列との使い分けで混乱する人もいると思いますので、
そちらも併せて説明していきます。
目次
1.連想配列とは
2.連想配列の定義
3.添字配列との違いは?
1.連想配列とは
冒頭でも説明したように、連想配列は
「キー(名前)」と「値」の組み合わせでデータを管理する配列です。
キーを設定し、それに対応した内容のデータを格納することでデータを格納する箱である配列と、実際のデータを明示的に紐づけます。
- キーとは 配列の中にどんなデータが入っているかを表す「ラベル」のようなものです。
連想配列の定義については次項で説明しますが、キーの設定については以下のような形で行われています。
$user = [
"キー1" => null,
"キー2" => null
];
キーは値ではなく、あくまで「ラベルの名前」です。
キーのみの設定では値は設定されておらず、null初期化されます。
2.連想配列の定義
連想配列は以下の形で宣言できます。
$配列名 = [
"キー1" => 値1,
"キー2" => 値2,
// ...
];
演算子=>
を使って、キーに値を割り当てています。
また、キー設定とデータの格納を別々に行うこともできます。
$user = [
"キー1" => null,
"キー2" => null
];
$user["キー1"] = 値1;
$user["キー2"] = 値2;
具体的に値を入れた例も作成してみましょう。
例
$user = [
"名前" => "たろう",
"年齢" => 25,
"出身地" => "東京",
"社員番号" => "012345"
];
echo $user["name"]; // たろう
連想配列を使用して、「たろう」という「名前」の人の各情報をまとめています。
キー | 値 |
---|---|
名前 | たろう |
年齢 | 25 |
出身地 | 東京 |
社員番号 | 012345 |
3.添字配列との違いは?
添字配列では、数値キー([0][1]...[n])を使って配列を管理します。
実は、添字配列と連想配列は内部構造に違いはなく同じ配列です。
キーは数値(int)型と文字列(String)型の2種類あり、それぞれのキーも区別はありません。そのため、前項で紹介した「連想配列の定義」は、添字配列の定義にも当てはまります。
また、以下のように2種類のキーを同時に使うこともできます。
$user = [
"名前" => "山田太郎",
"年齢" => 25,
0 => "東京",
-1 => "012345"
];
数値キーと文字列キーは区別なく扱われるため、文字列キーとして数字を扱ったキーを設定すると上書きされてしまう場合があります。
$array = [
"10" => "みかん",
10 => "りんご" //$array["10"]を上書き
];
echo $array["10"]; // りんご
連想配列のメリット
連想配列では、キーに具体的な名前を設定することでデータの意図を明確にしています。
数値キー(番号) | 文字列キー(名前) |
---|---|
0 | 名前 |
1 | 年齢 |
2 | 出身地 |
3 | 社員番号 |
例えば、以下のようなコードがあったとします。
$user = ["山田太郎", 25, "東京", "012345"];
echo $user[0]; // 山田太郎
(このコードではキーの設定を省略しています。
省略した場合、0から始まり1ずつ増えた値が数値キーとして設定されます。)
出力している$user[0]
がどんなデータであるか、ぱっと見では分かりにくいコードであると言えます。
出力結果としては連想配列を使用したときと変わりませんが、コードの
可読性(読みやすさ) が大きく変わります。「山田太郎」 は 「名前」 であるとコード上で明白に分かることは、複数人で行うプロジェクト開発では重要なポイントです。
添字配列と連想配列には、それぞれ適した役割があります。
このページでは、連想配列の解説を行うために比較対象として添字配列を使用したコードを記載しましたが、「どちらがより優れているか」という話ではないので、その点をご理解ください。
まとめ
ここまで、PHPで使われる連想配列について解説しました。
少しでも理解の手助けになれば幸いです。
最後までお読みいただき、ありがとうございました。
参考
・PHP:配列 Manual
・PHP連想配列の書き方から応用まで|実例で理解するデータ管理の鍵
著者:M.N(株式会社ウィズツーワン)