5.3 多维数组
如果数组元素中的“值”是另一个数组,此时数组是一个二维数组,甚至是多维数组。由于实际编程中二维数组经常使用,很少涉及多维数组,因此这里主要介绍二维数组的使用。
5.3.1 二维数组的创建
二维数组的创建方法和一维数组的创建方法相同。
方法1 直接将变量声明为二维数组
将数组元素的值设置为另一个数组时,该数组为二维数组,例如如下程序twoDimension.php,程序twoDimension.php创建了一个二维数组$students,该程序的运行结果如图5-13所示,该程序运行过程中的内存分配图如图5-14所示。
<?php
$students["2010001"] =
array("studentNo"=>"2010001","studentName"=>"张三","studentSex"=>"男");
$students["2010002"] =
array("studentNo"=>"2010002","studentName"=>"李四","studentSex"=>"女");
$students["2010003"] =
array("studentNo"=>"2010003","studentName"=>"王五","studentSex"=>"男");
$students["2010004"] =
array("studentNo"=>"2010004","studentName"=>"马六","studentSex"=>"女");
print_r($students);
?>
二维数组看上去很像二维表,数组中的第一个“键”用于确定二维表中的某一“行”,数组中的第二个“键”用于确定二维表中的某一“列”(如表5-1所示)。
方法2 使用array()语言结构创建二维数组
二维数组$students也可以使用array()语言结构进行定义,例如程序twoDimension.php也可以修改为如下代码。
<?php
$students = array(
"2010001"=>
array("studentNo"=>"2010001","studentName"=>"张三","studentSex"=>"男"),
"2010002"=>
array("studentNo"=>"2010002","studentName"=>"李四","studentSex"=>"女"),
"2010003"=>
array("studentNo"=>"2010003","studentName"=>"王五","studentSex"=>"男"),
"2010004"=>
array("studentNo"=>"2010004","studentName"=>"马六","studentSex"=>"女")
);
print_r($students);
?>
5.3.2 二维数组元素“值”的访问
二维数组中存在两个“键”,因此访问数组元素的“值”时需要指定这两个“键”。例如$students["2010001"]["studentName"]对应的值是"张三",其中第一个键"2010001"用于指定二维数组$students 中的某一“行”,第二个键"studentName"用于指定二维数组$students 的该“行”的某一“列”。只使用第一个“键”访问数组时,访问的是二维数组中的某一“行”,该行是一个一维数组(例如$students["2010001"]对应的值是数组),例如,程序visitArray2.php如下。
<?php
$students = array(
"2010001"=>
array("studentNo"=>"2010001","studentName"=>"张三","studentSex"=>"男"),
"2010002"=>
array("studentNo"=>"2010002","studentName"=>"李四","studentSex"=>"女"),
"2010003"=>
array("studentNo"=>"2010003","studentName"=>"王五","studentSex"=>"男"),
"2010004"=>
array("studentNo"=>"2010004","studentName"=>"马六","studentSex"=>"女")
);
var_dump($students["2010001"]["studentName"]); //输出:string(4) "张三"
echo "<br/>";
var_dump($students["2010001"]);/*输出:array(3) { ["studentNo"]=> string(7) "2010001"
["studentName"]=> string(4) "张三" ["studentSex"]=> string(2) "男" } */
?>