プログラミングを学んでいると配列と連想配列という紛らわしい2つの用語が出てきます。
この2つは言語 ( 例えばJavaScript ) によっては全く別物扱いです。
しかし、PHPの場合は配列も連想配列も全く同じものとして扱われます。
ということでPHPを知らない人向けににそれについて詳しく解説
PHPでの配列と連想配列の作り方
もう既に同じものだとネタバレしてますが、初めに配列と連想配列の作り方を説明しましょう。
両者の作り方を具体的なコード例を使って説明すると次の通り
配列
配列は多くのプログラミング言語でおなじみのものですよね。
これは複数の値を順番に並べて扱うことができるデータ構造です。
PHPの場合、配列はコンマ(,)区切りの値を [] でくくって宣言します。
例えば次のように
1 2 3 4 5 6 7 8 9 |
/** 数字配列の例 */ $primes = [ 2, 3, 5, 7, 11, 13, 17, 19 ]; /** 文字列配列の例 */ $fruits = [ 'Apple', 'Banana', 'Cherry' ]; /** 複数の型が混じった例 */ $mixed = [ '1', 1, true ]; |
PHPの場合は異なる種類のデータも混合して代入することも可能です。
そして配列の値にアクセスするには 0 から始まるインデックス番号でアクセスします。
例えば次がインデックスから配列の各要素の値を取り出している例
1 2 3 4 5 |
$fruits = [ 'Apple', 'Banana', 'Cherry' ]; $apple = $fruits[0]; $banana = $fruits[1]; $cherry = $fruits[2]; |
上のコード例のようにインデックス番号は 1 からではなく、0 から始まる点に注意です。
以上がPHPでの配列の作り方とアクセス方法
連想配列
連想配列というのはキーと値のペアを複数持つデータ構造のこと
他の言語だとハッシュとかマップとかディクショナリとかとも呼ばれています。
それでこの連想配列は [] の中にキーと値を キー名 => 値 で結んだものを複数入れて宣言します。
例えば次のような感じで
1 2 3 4 5 6 7 8 9 |
$days = [ 'Sun' => 'Sunday', 'Mon' => 'Monday', 'Tue' => 'Tuesday', 'Wed' => 'Wednesday', 'Thu' => 'Thursday', 'Fri' => 'Friday', 'Sat' => 'Saturday' ]; |
上のコードのように 'Sun' というキーには 'Sunday' という値、 'Mon' というキーには 'Monday' という値、というように1対1でキーと値が対応しています。
そしてこの連想配列の値を取得するには $連想配列['キー名'] のようにアクセスします。
1 2 3 |
$monday = $days['Mon']; $thusday = $days['Thu']; $saturday = $days['Sat']; |
上の例のように $days['Mon'] とか $days['Thu'] のように書けばOKです。
以上がPHPでの連想配列の作り方とアクセスの仕方
PHPでは配列と連想配列は実は同じ
ここまでの説明だと配列と連想配列は全く別物のように見えるかもしれません。
しかし内部的には全く同じ構造を持っています。
じゃあそれを確かめるにはどうすればいいか、ということですがデータの中身を見てみましょう。
PHPではprint_r関数を使うことでデータの中身を分かりやすく表示してくれます。
それではある配列の中身を print_r で表示してみます。
そのコード例は次の通り
1 2 |
$fruits = [ 'Apple', 'Banana', 'Cherry' ]; print_r($fruits); |
そして次が上のコードでの $fruits という配列の表示結果
1 2 3 4 5 6 |
Array ( [0] => Apple [1] => Banana [2] => Cherry ) |
これを見れば配列も連想配列の一部だとはっきり分かりますよね?
表示結果では [0] => Apple 、 [1] => Banana 、 [2] => Cherry のように連想配列のキーと値のペアの形をしています。
つまりPHPでは配列と連想配列には次のような違いしかありません
- 配列
キーは 0から始まり 1 ずつ増えるインデックス番号になっている
- 連想配列
キーは連想配列の宣言時に好きなように決められる
配列と連想配列の違いは値に対応するキーが勝手に決まるか、あるいは自分で決められるかどうかだけです。
そしてもっと踏み込んで言えば
PHPには配列というデータ構造はない、あるのは連想配列だけ
ということにもなります。
なので配列を扱うときは次のように考えておくと変なミスに悩まされることが少なくなります。
- PHPの配列は配列ではなく連想配列をアレンジしたもの
- 配列のインデックス番号はいつでも変更できる
- インデックス番号はもしかしたら数字ではないかもしれない
他の言語と同じような感覚で配列を扱うと「なんでこうなるんだ(驚愕)!」と悩み続けることになるので要注意ですね。
ここまでのまとめ
という訳で配列と連想配列はPHPでは全く同じだよ、という話でした。
他の言語に慣れてると受け入れがたい事実ですが、そこは慣れていくしかありません。
それとそもそもPHPには厳密な意味での配列は存在しないと思っておいた方がいいと思います。
ではでは・△・)ノ バイバイ