php递归遍历多维数组函数_php多维数组递归技巧详解【教程】

PHP处理不确定嵌套层级的多维数组需递归:一、基础遍历输出键值对;二、提取所有叶子值;三、搜索指定键的所有值;四、引用修改指定键值;五、生成点号路径的扁平化数组。

php递归遍历多维数组函数_php多维数组递归技巧详解【教程】

如果您需要处理嵌套层级不确定的多维数组,例如从配置文件、API响应或表单提交中获取的数据结构,则必须使用递归方式逐层访问每个元素。以下是实现 PHP 多维数组递归遍历的多种方法:

一、基础递归函数遍历并输出键值对

该方法定义一个自调用函数,判断当前元素是否为数组;若是,则递归进入下一层;否则直接输出键与值。适用于调试和简单展示场景。

1、定义函数 function tr*erseArray($arr, $indent = ""),接收数组和缩进字符串作为参数。

2、使用 foreach ($arr as $key => $value) 遍历当前层级所有键值对。

3、若 $value 是数组(is_array($value)),则递归调用 tr*erseArray($value, $indent . " ") 并增加缩进。

4、若非数组,则输出 $indent . "$key => $value"

二、递归提取所有叶子节点值(不带键名)

该方法忽略键名,仅收集所有最终非数组类型的值,常用于数据扁平化或去重前准备。

1、定义函数 function getLeafValues($arr),返回包含所有叶子值的一维数组。

2、初始化空数组 $result = []

3、遍历输入数组,对每个 $value 判断:若为数组则合并递归调用 getLeafValues($value) 的结果;否则将 $value 推入 $result

4、返回 $result

三、递归搜索指定键名并返回所有匹配值

当需从深层嵌套结构中定位特定键(如 'id' 或 'name')的所有出现位置时,此方法可一次性提取全部对应值。

1、定义函数 function searchKey($arr, $targetKey),接收待查数组与目标键名。

2、初始化结果数组 $matches = []

3、遍历当前数组,若当前键等于 $targetKey,则将对应值加入 $matches

Find JSON Path Online Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 193 查看详情 Find JSON Path Online

4、若当前值为数组,则合并递归调用 searchKey($value, $targetKey) 的返回结果到 $matches

5、返回 $matches

四、递归修改所有指定键对应的值

该方法可在原数组结构不变的前提下,批量更新某类键(如统一将所有 'status' 改为 'active'),支持引用传递以确保深层修改生效。

1、定义函数 function updateByKey(&$arr, $targetKey, $newValue),使用 &$arr 实现引用传参。

2、遍历数组,若当前键匹配 $targetKey,则将 $arr[$key] 赋值为 $newValue

3、若当前值为数组,则递归调用 updateByKey($value, $targetKey, $newValue)

4、确保每次递归调用均作用于引用变量,即使用 updateByKey($arr[$key], $targetKey, $newValue)

五、递归生成带路径标识的扁平化数组

为便于后续映射或数据库存储,该方法将多维结构转换为一维关联数组,键名为点号分隔的完整路径(如 'user.profile.name')。

1、定义函数 function flattenWithKeys($arr, $prefix = ""),支持路径前缀拼接。

2、初始化空数组 $flattened = []

3、遍历当前数组,构造当前键路径:$currentKey = $prefix === "" ? $key : $prefix . "." . $key

4、若 $value 是数组,则合并递归调用 flattenWithKeys($value, $currentKey) 的结果。

5、否则将 $flattened[$currentKey] = $value

以上就是php递归遍历多维数组函数_php多维数组递归技巧详解【教程】的详细内容,更多请关注其它相关文章!

本文转自网络,如有侵权请联系客服删除。