【PHP】多次元配列 – 配列を階層的に記憶するデータ構造

配列の中に配列を記憶することができます。
そのような配列が階層的になっているデータ構造を多次元配列と呼びます。

ここでは多次元配列について解説します。

★ 内容

  • 多次元配列

多次元配列とは

多次元配列とは配列の中に配列を記憶したデータ構造のことです。
配列が階層的になっており、2階層の場合は2次元配列、3階層の場合は3次元配列と階層数によって次元数が変わります。

基本構文

多次元配列は配列の基本構文で使うことができます。
配列については次の記事をご覧ください。

サンプルコード

多次元配列は配列を複合して作ります。
2次元配列を使うサンプルコードをご覧ください。

ソースコード

<?php

// 配列の宣言(初期化)
$members = [
    // 配列1
    [
        'name' => 'Watanabe You',
        'birthday' => '4/17',
        'height' => 157,
    ],
    // 配列2
    [
        'name' => 'Nishikino Maki',
        'birthday' => '4/19',
        'height' => 161,
    ],
    // 配列3
    [
        'name' => 'Tang keke',
        'birthday' => '7/17',
        'height' => 159,
    ],
];

// 配列の値を再代入
$members[0]['heihgt'] = 160;

// 配列に値を追加
$members[] = [
    'name' => 'Shibuya Kanon',
    'birthday' => '5/1',
    'height' => 159,
];

// 配列の値を出力
echo $members[0]['name']."\n";
echo $members[0]['heihgt']."\n";
echo $members[3]['name']."\n";

?>

実行結果

Watanabe You
160
Shibuya Kanon

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

行数概要
4~232次元配列の宣言と初期化(配列$membersに3つの配列を記憶)
262次元配列の値を再代入
292次元配列に配列(値)を追加
36~382次元配列の値を取得して出力

宣言(初期化)、値の記憶(再代入、追加)、値の取得について、詳しく解説します。

宣言(初期化)

4~23行目で宣言と初期化を行なっています。
配列の基本構文に当てはめて見ると、分かりやすく、1階層目の配列は$members=[]で、[]の中に2階層目の配列を3つ記述しています。

値の記憶

26行目で値を再代入しています。
2次元配列でキーを指定する場合はどのデータかを角括弧[]を繋ぎ合わせて指定します。
ここでは$members[0]['heihgt'] = 160となっており、前から1つずつ読むと理解しやすくなります。

コード意味
$members変数$member
[0]のキーが0の値
['heihgt']のキーが'height'の値

ポイントは[0]で指定したデータが配列であるということです。
配列ということは角括弧でキーを指定できるので、['height']を記述することができます。

また、29行目の値の追加も基本的な配列と同じで変数名と角括弧を使って記述できます。

値の取得

36~38行目で値の取得しています。
コードから分かる通り、値の記憶と同じ考え方で記述しています。

次元数

3次元配列、4次元配列とより深い階層の多次元配列の場合も、基本的には2次元配列と同じように角括弧[]を階層的に記述することで扱えるようになります。

しかし、階層を増やすと複雑なコードになってしまう可能性が高くなるので、必要な数だけ次元数を作るようにしましょう。

演習問題

問題1

解答例

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

  • 猫の情報は多次元配列$catsに記憶
  • 猫の情報は名前、誕生日、種類の3つ
  • 猫の情報は表のとおり
  • 猫の情報は多次元配列で出力する
名前誕生日種類
1匹目Tama4/24Munchkin
2匹目Koko8/14Persian
3匹目Zizi12/08Bengal

実行結果

1 --------------------
name     : Tama
birthday : 4/24
type     : Munchkin
2 --------------------
name     : Koko
birthday : 8/14
type     : Persian
3 --------------------
name     : Zizi
birthday : 12/08
type     : Bengal

問題2

解答例

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

  • 犬の情報は多次元配列$dogsに記憶
  • 犬の情報は名前、誕生日、種類の3つ
  • 犬の情報は表のとおり
  • 犬の情報は多次元配列で出力する
  • 出力する情報のキーをコマンドライン引数で与える
名前誕生日種類
1匹目Pochi7/24Maltipoo
2匹目Leo11/05Golden retriever
3匹目Sora3/24Dachshund

実行例1

コマンドライン

php practice.php 0 name    

実行結果

[0][name] : Pochi

実行例2

コマンドライン

php practice.php 1 birthday 

実行結果

[1][birthday] : 11/05

実行例3

コマンドライン

php practice.php 2 type

実行結果

[2][type] : Dachshund

まとめ

多次元配列は配列が階層になっているデータ構造のことです。
基本的な記法や考え方は通常の配列と同じですので、覚えていきましょう。