PHP

第3章 配列

  1. 最終更新日:
  2. 公開日:

この章では、前章の変数から一歩踏み込んで配列の扱い方を学んでいきます。

配列ってなに?

いきなり「配列」と言われても意味不明ですよね。
少しずつ見ていきますが、ここで大まかに説明してしまうと「たくさんの変数を1つにまとめたもの」です。たくさんの変数が集まったマンションのようなものでしょうか。
まずは図1を見てください。「変数」と「配列」にそれぞれ値を代入するところのイメージです。
$aが変数で、$bが配列です。

図1

変数と配列の違い

$aには5を代入しています。コードにすると$a = 5;ですね。

次に配列$bです。図1では「5」「6」「7」「8」の4つの値を代入することを表しています。これはコードにすると、以下のようになります。

code3-1.php

<?php
$b[0] = 5;
$b[1] = 6;
$b[2] = 7;
$b[3] = 8;

代入の式は変数と同じですが、変数名の後ろに[0]といった数字が書かれています。この数字が配列の特徴で、変数と違うポイントです。

配列は、複数の変数が繋がったものです。そして、[0][1]といった数字を指定することで、配列の中のどの変数を使うかを決めることができます。
図1を例にすると「5」は$bの先頭にある変数へ代入したいので[0]、「6」は2番目の変数へ代入したいので[1]、「7」は3番目の変数へ代入したいので[2]といった指定になります。

このように配列はたくさんの変数を繋げて、[数字]を指定することで個別の変数へアクセスすることができるようになっています。この[数字]の部分を「添字」と言います。添字は他にも「インデックス」や「キー」と言われることもありますが、どれも意味は一緒です。配列のどこへアクセスするかを指定するものです。

配列の先頭が「0」から始まっていることだけ注意してください。
例えば図1では配列の長さは4ですが、長さが100の場合はどうでしょうか。
100個目の変数へアクセスしたい場合は$b[99]となります。$b[100]ではありません。

上の例では全て数値を代入していますが、もちろん浮動小数やテキストを代入することも可能です。添字の指定以外は変数と同じように扱うことができます。
例えば$b[0]には数値を入れて、$b[1]にはテキストを入れるといったことも自由に行えるのです。
そして、配列の長さ(変数をいくつ繋げるか)も自由に決めることができる、非常に便利な仕組になっています。

配列を使うメリットは?

では、なぜ配列を使うのでしょうか。扱う変数の数が一緒なのであれば、個別で変数を使うのと変わりがないように思えます。

その理由は、添字を変えるだけで複数の変数へアクセスできることです。
この後の章で学ぶ、基本構文の1つである「ループ処理(繰り返し処理)」で、このメリットが発揮されます。

ループ処理は後の章で改めて取り上げますが、処理イメージとしては名前の通り同じような処理を繰り返し行いたい場合に使います。
例えばループ処理を3回行う場合ですが、まずは「変数」を使って処理した場合を見てみます。図2を見てください。

図2

「変数」を使ったループ処理

次に、「配列」を使って処理した場合です。図3を見てください。

図3

「配列」を使ったループ処理

図2と図3を比べてみると、一見大きな違いはないように思えます。しかし、もしこのループ処理を50回行う必要があるとしたらどうでしょうか。「配列」の場合は添字が増えていくだけなので、「$b[0]から$b[49]まで処理が行われるんだろうな」と、簡単に想像することができると思います。

一方、「変数」の場合だと少し困ってしまいます。アルファベットは「a」〜「z」まで26文字しかないため、それ以降の変数名がどうなるのか想像することができません。「A」と大文字になるのかもしれませんし、「aa」と2桁になるかも分かりません。

このように配列にしておくと、「添字を1つ増やせば次の変数へアクセスできる」というシンプルなルールを持たせることができるのです。

連想配列

ここまで配列の添字には数値を使ってきましたが、テキストを使うこともできます。

code3-2.php

<?php
$c['name'] = 'Jack';
$c['age'] = 23;
$c['gender'] = 'Male';

このように、添字をテキストにした配列のことを「連想配列」と言います。
「連想」とは、添字がテキストになることで中にどんな値が設定されているかが想像し易い、というところから来ています。
上のコードでいうと、「name」には名前が入っていることが分かりますし、「age」は年齢、「gender」は性別に関する値が入っているんだな、と想像することが出来ますね。

しかし、先ほど「配列」と「変数」の違いのところで、「配列は添字の数値を1つ増やせば次の変数へアクセスできる」というルールについて話をしたばかりでした。これでは配列を使おうが、$name$age$genderのように変数を3つ使うのと変わらないような気がしてしまいますね。

もちろん、ちゃんと連想配列を使うことのメリットがあります。

多次元配列

ここまで「配列」について見てきましたが、まだまだ便利なところがあります。実は、配列の中に配列を作ることも出来てしまうんです。
と急に言われても、ちょっとイメージし辛いかもしれません。そこで、「第2章 変数と定数」のようにECサイトの商品を例に見ていきましょう。

商品にはジーンズ、Tシャツ、パーカーなどがありますが、それぞれに値段やサイズが決まっていると思います。
これらを配列として表現すると以下のようになります。

code3-3.php

<?php
$item[0]["name"] = "ジーンズ";
$item[0]["price"] = 7980;
$item[0]["size"] = "M";

$item[1]["name"] = "Tシャツ";
$item[1]["price"] = 2980;
$item[1]["size"] = "S";

$item[2]["name"] = "パーカー";
$item[2]["price"] = 4400;
$item[2]["size"] = "M";

code3-3.php」の配列は図4のようになっています。

図4

多次元配列のイメージ

$item[0]の中に["name"]["age"]["gender"]とテキストを添字にした配列が入っています。
$item[1]$item[2]も同様です。

このように配列の中に配列を入れることを、「多次元配列」と言います。
1つ目の添字を数値にすることで、ループ処理で配列の強みである「数値を1つ増やせば次の変数へアクセスできる」という点を活かすことができます。さらに2つ目の添字がテキストになっていることで、商品の値段を取得するには「price」へアクセスすれば取得できることが分かるというわけです。

なので、例えば商品の合計を求めたい場合は以下のようなコードになります。

code3-3.php

<?php
$item[0]["name"] = "ジーンズ";
$item[0]["price"] = 7980;
$item[0]["size"] = "M";

$item[1]["name"] = "Tシャツ";
$item[1]["price"] = 2980;
$item[1]["size"] = "S";

$item[2]["name"] = "パーカー";
$item[2]["price"] = 4400;
$item[2]["size"] = "M";

echo "合計金額:¥" . $item[0]["price"] + $item[1]["price"] + $item[2]["price"];

商品が100個あったとしても、$item[0]["price"]$item[99]["price"]までを足せば求められますね。
今回のように配列の中に配列が入ったものを「2次元配列」と言います。
※「3次元配列」、「4次元配列」を作ることも可能ですが、複雑になってしまうのでここでは扱いません。

まとめ

配列についてみてきました。配列は変数に並んでよく使うものなので、必ず理解しておいてください。

この章で学んだこと

  • 「配列」はたくさんの「変数」を繋げたもの
  • 配列は数値やテキストの「添字」を付けてアクセスする
  • 配列の中に配列を入れて「多次元配列」を作ることができる

記事一覧

  1. 第1章 PHPが動く仕組み
  2. 第2章 変数と定数
  3. 第3章 配列
  4. 第4章 スーパーグローバル
  5. 第5章 クッキーとセッション
  6. 第6章 サーバー情報の取得
  7. 第7章 if文
  8. 第8章 switch文
  9. 第9章 while文
  10. 第10章 for文
  11. 第11章 foreach文
  12. 第12章 独自の関数
  13. 第13章 オブジェクト指向
  14. 第14章 クラス
  15. 第15章 オブジェクト

記事一覧