
PHP 多维数组遍历在面试中常考,核心是考察对递归、引用、内置函数的理解和边界处理能力。不写死层数、能处理混合结构(含非数组元素)、避免重复或漏遍历,是高分关键。
递归遍历(最常用,推荐手写)
适用于任意深度,逻辑清晰,容易体现思维严谨性。注意判断是否为数组,防止非数组元素触发警告:
- 用 is_array() 做类型校验,跳过字符串、数字、null 等
- 递归调用前建议加 isset() 或空数组判断,避免 warning
- 若需获取完整键路径,可传入引用参数累积键名,如
$path = [],每层追加当前键
foreach + is_array() 非递归展开(适合有限层级)
当明确最多 3 层时,可用嵌套 foreach 提升可读性,但需逐层判空和类型:
- 外层 foreach 后立刻用 is_array() 判断子项
- 第二层再判一次,避免把字符串当数组遍历导致 fatal error
- 适合展示控制流意识,但不推荐用于“任意深度”题干
array_walk_recursive()(简洁但有局限)
内置函数一行搞定值遍历,但会跳过键名、丢失层级信息、无法修改原数组(除非传引用):
立即学习“PHP免费学习笔记(深入)”;
- 回调函数中第三个参数是键路径(从 PHP 7.4 起支持),但旧版本不返回
- 若题目要求“打印键值对”或“统计所有数字”,它很高效;若要“按层级缩进输出”,就不适用
- 面试中可提,但需说明适用场景和缺陷,体现权衡能力
引用遍历修改原数组(进阶考点)
当题目要求“将所有字符串转大写”或“删除所有 null 值”,需用引用操作:
- foreach 的 &$value 是基础,但多维时需递归中也传引用
- 修改子数组本身(如 unset 某个子项)要用 &$item,否则操作的是副本
- 注意 unset 后的键错位问题,遍历时改结构建议用 for + array_keys() 或反向遍历
不复杂但容易忽略细节,比如没校验类型、递归没出口、引用漏写 &、误用 array_walk_recursive 处理键名需求。写完最好补一句:“实际项目中会结合具体需求选方案,面试更看重思路清晰和边界意识。”











