PHP中如何通过点分隔字符串访问多维数组的嵌套元素值
原生PHP实现点路径读取多维数组
直接通过拆分点分隔的路径字符串、逐层遍历数组的方式即可实现,不需要复杂的语法解析,代码可直接复用:
通用取值函数
function get_value_by_dot_path(array $array, string $dot_path, $default = null) { // 将点分隔的字符串拆分为独立的层级键列表 $keys = explode('.', $dot_path); $current_level = $array; foreach ($keys as $key) { // 路径中途出现非数组层级、或键不存在时,直接返回默认值,避免触发未定义键警告 if (!is_array($current_level) || !array_key_exists($key, $current_level)) { return $default; } $current_level = $current_level[$key]; } return $current_level; }
函数没有强类型声明,可兼容所有PHP版本运行。
使用示例
注意你提供的示例数组中
"name" => 'Test A'一行末尾漏了逗号,实际使用时需要补上符合PHP语法的分隔符,否则会触发解析错误。
// 语法修正后的原数组 $array = [ "id" => 1, "name" => 'Test A', "b" => [ "id" => 1, "name" => "Test B", "c" => [ "id" => 1, "name" => 'Test' ] ] ]; // 等价于读取 $array['b']['c'] $c = get_value_by_dot_path($array, 'b.c'); // 支持直接读取更深层的标量值,等价于 $array['b']['c']['name'] $target_name = get_value_by_dot_path($array, 'b.c.name'); // 路径不存在时可自定义返回默认值,不会抛出错误 $not_exists = get_value_by_dot_path($array, 'b.d.e', '自定义默认值');
扩展说明
- 这套逻辑同样支持写操作:遍历到路径最后一层时,直接对当前层级的对应键赋值,即可实现修改嵌套数组任意位置的值
- 整个实现没有第三方依赖,可直接在任意PHP项目中复用
内容的提问来源于stack exchange,提问作者user4649470
相关产品推荐
相关产品推荐

