PHP 二维数组怎么遍历
在做网站开发或者数据处理的时候,我们经常会遇到需要处理成组信息的情况,比如把一个班级的学生姓名、学号、成绩放在一起,就像一张表格,每行对应一个学生,每列对应一项信息。这种“套娃”式的数组,在PHP里就叫二维数组,它就像Excel的工作表,有行有列,比单个的一维数组好用多了,但很多新手刚接触时,会不知道怎么把里面的内容一个个找出来。
什么是PHP二维数组?先举个生活化的例子
先别急着记定义,我们用大家都熟悉的外卖订单来举例。假设你点了3份外卖,每份订单都有“商家名”“菜品”“金额”这3个信息,把这些订单整理成PHP数组,就会变成这样:

`php
$orders = [
['商家' => '老四川菜馆', '菜品' => '麻婆豆腐', '金额' => 28],
['商家' => '鲜粥铺', '菜品' => '皮蛋瘦肉粥', '金额' => 12],
['商家' => '烧烤摊', '菜品' => '烤茄子', '金额' => 15]
];
`
这就是最常见的关联型二维数组,外层的数组对应“所有订单”,里面的每个小数组对应“单个订单”,就像把3张外卖小票叠在了一起,想单独拿某一张,或者把所有内容都过一遍,就需要用到“遍历”——也就是逐个查看每一个元素。
最常用的遍历方法:两层foreach,新手一看就会
PHP里遍历二维数组,最不容易出错的就是用foreach循环套循环,就像先把一叠小票拆成一张张单独的,再把每张小票上的信息逐行看一遍。
外层的foreach负责遍历所有小订单(也就是外层数组的每一项),我们给每个小订单起个简单的名字,比如$single_order;内层再用一个小foreach,把单个订单里的“商家、菜品、金额”这些信息逐个输出。
举个实际的代码例子:
`php
foreach ($orders as $single_order) {
// 内层循环:处理每个小订单里的具体信息
foreach ($single_order as $key => $value) {
echo "$key:$value <br>";
}
echo '--- 这是一张订单的分隔线 --- <br>';
}
`
输出的结果会是清晰的一条条订单:
商家:老四川菜馆
菜品:麻婆豆腐
金额:28
--- 这是一张订单的分隔线 ---
……以此类推,把3张订单的内容都完整列出来,完全不会乱。这种方法的好处是不用记数组的具体下标,哪怕订单的信息顺序变了,也能正常读取,适合新手用。
进阶技巧:只遍历指定的内层元素,不用全读
如果我们不需要看订单的所有信息,只需要把“菜品”的名称列出来,那可以不用套两层循环,直接在外层循环里读取对应键的值就好,就像只挑出小票上的“菜品”项,不用看金额和商家。
代码会更简洁:
`php
foreach ($orders as $single_order) {
echo '今天点的菜:' . $single_order['菜品'] . '<br>';
}
`
这样输出的结果会直接是3个菜品名,少了冗余信息,适合只需要提取特定内容的场景。
避开新手最容易踩的坑
很多新手第一次用二维数组遍历,会犯两个错误:一是把内外层循环搞混,比如只写一层foreach,结果只输出了外层数组的“Array”字符串,根本看不到具体内容;二是用数字下标遍历的时候,忘了内层数组的元素顺序,导致取错信息。
其实只要记住:二维数组的核心是“外层管‘组’,内层管‘组里的单个项’”,不管是用关联键还是数字下标,只要分清楚两层的对应关系,就不会出错。日常开发里,90%的二维数组遍历场景,用两层foreach就能搞定,不用特意学复杂的函数。