多次元配列とは、配列の要素の中に配列が入っている状態。
配列が、多重に成っている配列を言う。
で、その定義の仕方は、配列の定義の記事で書いた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つなのが、しっくりこない原因。
今度、詳しく調べてみよう。
Comments