PHP 速習チュートリアル

PHP 多次元配列

1. PHP 多次元配列

多次元配列(Multidimensional Array)とは、1つ以上のアレイ(Array)を要素として保持しているアレイのことです。

PHP は 2段階、3段階、4段階、あるいは 5段階以上の深さを持つ多次元配列をサポートしています。しかし、実務上の経験から言うと、3段階を超える深さのアレイは、多くの開発者にとって管理やデバッグが非常に困難になります。

2. PHP 二次元配列

二次元配列は「アレイのアレイ」です(同様に、三次元配列は「アレイのアレイのアレイ」となります)。

以下のテーブル(表)のデータを例に考えてみましょう:

名前(ブランド)在庫数 (Stock)販売数 (Sold)
Volvo2218
BMW1513
Saab52
Land Rover1715

この表のデータは、以下のように二次元配列として格納(ストア)できます。

$cars = array (
  array("Volvo", 22, 18),
  array("BMW", 15, 13),
  array("Saab", 5, 2),
  array("Land Rover", 17, 15)
);

この二次元の $cars アレイには 4 つのアレイが含まれており、アクセスには行(Row)と列(Column)という 2 つのインデックス(Index)が必要になります。

$cars アレイの各要素にアクセスするには、これら 2 つのインデックスを指定してください。

2.1 例:特定の要素へのアクセス

echo $cars[0][0].": 在庫: ".$cars[0][1].", 販売済み: ".$cars[0][2].".<br>";
echo $cars[1][0].": 在庫: ".$cars[1][1].", 販売済み: ".$cars[1][2].".<br>";
echo $cars[2][0].": 在庫: ".$cars[2][1].", 販売済み: ".$cars[2][2].".<br>";
echo $cars[3][0].": 在庫: ".$cars[3][1].", 販売済み: ".$cars[3][2].".<br>";

アレイの「次元」とは、その要素を選択するために必要なインデックスの数を示します。

  • 二次元配列の場合、要素を選択するために 2 つのインデックスが必要です。
  • 三次元配列の場合、要素を選択するために 3 つのインデックスが必要です。

3. 多次元配列のループ処理

多次元配列のすべての要素を走査(スキャン)するには、for ループや foreach ループを使用します。

ここでは、for ループの内側に別の for ループをネスト(Nest)させて、$cars アレイの要素を取得する例を紹介します。

3.1 例:ネストされた for ループによる走査

for ($row = 0; $row < 4; $row++) {
  echo "<p><b>行番号 $row</b></p>";
  echo "<ul>";
    for ($col = 0; $col < 3; $col++) {
      echo "<li>".$cars[$row][$col]."</li>";
    }
  echo "</ul>";
}

また、foreach ループをネストさせて使用することも可能です。以下の例では、結果を HTML のテーブル形式で出力しています。

3.2 例:ネストされた foreach ループによるテーブル出力

echo "<table>";
echo "<tr><th>ブランド</th><th>在庫数</th><th>販売数</th></tr>";

foreach ($cars as $row) {
  echo "<tr>";
  foreach ($row as $cell) {
    echo "<td>" . $cell . "</td>";
  }
  echo "</tr>";
}

echo "</table>";