前言
数组是一个用来存储一系列变量值的命名区域。在PHP中,数组可以存储PHP中支持的所有类型的数据,也包括在数组中存储数组类型的数据。如果数组中的元素仍为数组,就构成了包含数组的数组,即是多维数组。 比如:我们前面举过的学生信息列表的例子,如下图所示:
上图的表中有三条数据,可以将这3条学生信息数据声明成3个一维数组。对其中一个一维数组进行处理,即可以对学生信息列表中的一条记录数据进行操作。但如果在学生信息列表中学生的人数比较多,就需要声明很多个一维数组,在程序中对大量的一维数组进行操作也是一件非常繁琐的事情。所以我们可以将这些一维数组全部放进另外一个一维数组中,这个存放多个学生信息的数组就是二维数组。这样就可以在程序中使用一个变量存储学生信息列表中的所有数据,只要在程序中对这个二维数组进行处理,即可对整个学生信息列表进行操作。
二维数组的定义
二维数组的声明和一维数组的声明方式一样,只是将数组中的每个元素也声明为一个数组,也有直接为数组元素赋值和使用array()函数两种声明数组的方式,其代码如下:
<?php
$arr = array(
array(1,'张三','五年级1班','11001'),
array(2,'李四','五年级1班','11002'),
array(3,'王五','五年级1班','11003')
);
?>
在上面的代码中,可以看到使用array()函数创建的二维数组$arr,其中包含的3个元素也是使用array()函数声明的子数组。这个数组默认采用了数字索引方式,也可以使用"=>"运算符指定二维数组中的每个元素的下标。下面代码的将每个人的班级修改成不同班级,代码如下:
<?php
$arr = array(
'五年级1班' => array(1,'张三','五年级1班','11001'),
'五年级2班' => array(2,'李四','五年级2班','11002'),
'五年级3班' => array(3,'王五','五年级3班','11003')
);
?>
我们从前面的文章中了解到,访问一维数组是使用数组的名称和索引值,二维数组的访问方式和一维数组是一样的。二维数组是数组的数组,比如:通过$arr[0]可以访问到数组$arr中的第一个元素,而访问的这个元素还是一个数组,,所以可以再通过索引值访问子数组中的元素。比如:$arr[0][1],第一个索引值0访问数组$arr中的第一个元素,再通过一个索引值1访问子数组$arr[0]中的第二个元素。访问二维数组中的元素代码如下:
<?php
$arr = array(
array(1,'张三','五年级1班','11001'),
array(2,'李四','五年级1班','11002'),
array(3,'王五','五年级1班','11003')
);
$arr2 = array(
'五年级1班' => array(1,'张三','五年级1班','11001'),
'五年级2班' => array(2,'李四','五年级2班','11002'),
'五年级3班' => array(3,'王五','五年级3班','11003')
);
echo "五年级1班的学生姓名:".$arr[0][1]."\n";
echo "五年级2班的学生姓名:".$arr2['五年级2班'][1]."\n";
?>
执行结果如下:
三维数组的定义
如果二维数组的二维元素中仍包含数组,就构成了一个三维数组,以此类推,可以创建四维数组,五维数组等多维数组。但一般三维以上的数组并不常用,二维数组是我们实际开发中比较常用的数组,比如从MySQL,SQLSERVER等关系型数据库中读取到的数据集就是二维数组,还要从Excel表格中读取的数据同样是二维的。
其实三维数组的声明跟一维二维数组一样简单,就只是多加了一层而已,下面我们通过一个例子来了解三维数组的定义:把不同部门的员工工资存入数组中。
<?php
$employee = array(
"销售部" => array(
array(1001,"张三",8000),
array(1002,"李四",5000)
),
"运营部" => array(
array(1003,"王五",12000),
array(1004,"赵六",10000)
),
"技术部" => array(
array(1005,"李白",15000),
array(1006,"鲁班",11000)
)
);
print_r($employee['技术部']);
print_r($employee['技术部'][0]);
print_r($employee['技术部'][0][2]);
?>
执行结果如下:
上面例子中声明了一个三维数组变量$employee,在数组$employee中存放三个数组用于存储三个部门的工资,在每个部门的数组中又声明了两个数组用于存储两个员工的工资数据。三维数组的访问需要三个下标来完成。比如:使用$employee['技术部']可以访问数组$employee中的第三个元素,使用$employee['技术部'][0]访问数组$employee['技术部']中的第一个元素,使用$employee['技术部'][0][2]就可以访问到$employee['技术部'][0]中的第三个元素,这样就可以访问到技术部李白的薪资15000元,以此类推。