多次元配列とは、配列の要素の中に配列が入っている状態。

配列が、多重に成っている配列を言う。

で、その定義の仕方は、配列の定義の記事で書いたarrayを多重にすれば良い。

$objects = array('Soda can'   => array('Shape'    => 'Cylinder',
                                       'Color'    => 'Red',
                                       'Material' => 'Metal'),
                 'Notepad'    => array('Shape'    => 'Rectangle',
                                       'Color'    => 'White',
                                       'Material' => 'Paper'),
                 'Apple'      => array('Shape'    => 'Sphere',
                                       'Color'    => 'Red',
                                       'Material' => 'Fruit'),
                 'Orange'     => array('Shape'    => 'Sphere',
                                       'Color'    => 'Orange',
                                       'Material' => 'Fruit'),
                 'Phonebook'  => array('Shape'    => 'Rectangle',
                                       'Color'    => 'Yellow',
                                       'Material' => 'Paper')
);

こんな感じ、まず一次元目に、「Soda can」、「Notepad」、「Apple」、「Orange」、「Phonebook」があって、

各々に、「Shape」、「Color」、「Material」が連想配列でくっついている(二次元目)。

で、この多次元の配列の出力は、下記の通り、

foreach ($objects as $obj_key => $obj){
 echo "$obj_key:<br />";
 while(list($key,$value) = each($obj)){
 echo "$key = $value ";
 }
 echo "<br />";
}

上記のコードをブラウザに表示させると、

Soda can:
Shape = Cylinder Color = Red Material = Metal
Notepad:
Shape = Rectangle Color = White Material = Paper
Apple:
Shape = Sphere Color = Red Material = Fruit
Orange:
Shape = Sphere Color = Orange Material = Fruit
Phonebook:
Shape = Rectangle Color = Yellow Material = Paper

こんな感じに出力される。

このコードは、サンプルをそのまま引っ張ってきたもので、当然サンプルだから、ちゃんと動くのだけど、

何故そうなるかの理解がまだいまいち…

赤文字のlist関数each関数の働きがちょっと微妙に解らなかったので、調べてみました。

list関数は、配列の値を、変数に一気に値を格納する働きがあるっぽい。下記は、こちらのページのサンプル。

<?php
$info = array('コーヒー', '茶色', 'カフェイン');
list($drink, $color, $power) = $info;
echo "$drink の色は $color で、$power が含まれています。";

?>

上記のコードを出力すると、

コーヒー の色は 茶色 で、カフェイン が含まれています。

となる。

「$drink」に「コーヒー」、「$color」に「茶色」、「$power」に「カフェイン」が各々格納されている。

一方each関数は、「配列から現在のキーと値のペアを返して、カーソルを進めます。」と書いてある。

 <?php
$foo = array("Robert" => "Bob", "Seppo" => "Sepi");
$bar = each($foo);
print_r($bar);
?> 

上記コードを出力すると、

Array
(
    [1] => Bob
    [value] => Bob
    [0] => Robert
    [key] => Robert
)
こんな感じに出力される。
[0]と[key]がキーで、[1]と[value]が値。
で、肝心の赤文字の意味ですが、
list($key,$value) = each($obj)という事は、
「変数$keyと$valueに配列each($obj)の値を格納している。」って事になる。
で、$keyと$valueをechoで出力している。while文の条件式に書かれているので、FALSEになるまで(最後まで)繰り返している。
うーん、この解釈で良いのだろうか???
オレオレ解釈…
each関数は、4つの要素を返すのに定義している変数が2つなのが、しっくりこない原因。
今度、詳しく調べてみよう。