Laravel中如何转义数组键名的点?Arr::get方法使用疑问
Laravel Arr::get 点表示法与含
.键名的问题解答 这是预期行为
Laravel 的 Arr::get 方法处理点表示法时,会将传入的键路径按.拆分为层级数组。比如调用 Arr::get($array, 'foo.bar.baz') 时,路径会被拆分为 ['foo', 'bar', 'baz']:
- 第一步查找根数组中的
foo键,得到子数组['bar.baz' => 'X'] - 第二步尝试在这个子数组中查找
bar键,但子数组里并没有bar这个键,只有bar.baz,因此无法匹配,最终返回null
你尝试的转义写法foo\.bar.baz并不被Arr::get默认支持,方法仍会按.拆分路径,所以同样返回null。
优雅解决方案
针对包含.的键名,推荐以下几种简洁的获取方式:
分步获取:先拿到目标子数组,再直接用完整键名取值,兼顾安全(避免不存在键报错):
Arr::get($array['foo'], 'bar.baz'); // 或者用PHP原生空合并运算符 $array['foo']['bar.baz'] ?? null;自定义分隔符:利用
Arr::get的第四个参数指定非.的层级分隔符,避开键名中的.:Arr::get($array, 'foo|bar.baz', null, '|');数组形式路径(推荐):使用
data_get辅助函数时,传入数组形式的路径,精确指定每个层级的键,完全避免路径拆分的歧义:data_get($array, ['foo', 'bar.baz']);
内容的提问来源于stack exchange,提问作者Brayan Martínez Santana
相关产品推荐
相关产品推荐

