PHP如何通过键名数组引用无限层级嵌套数组的原始值进行读写
PHP 多维数组按键路径引用实现方案
核心实现逻辑依赖PHP的引用特性,全程使用引用赋值遍历键路径,最终得到的就是原数组目标位置的引用,修改时会直接作用于原数组,不会产生任何副本:
通用引用获取方法
/** * 按键路径获取多维数组对应位置的引用 * @param array $array 原多维数组,必须传引用 * @param array $keys 层级键名数组 * @param bool $autoCreate 是否自动创建不存在的中间层级,默认关闭 * @return mixed 目标位置的引用 */ function &getNestedValueRef(array &$array, array $keys, bool $autoCreate = false) { $current = &$array; foreach ($keys as $key) { if ($autoCreate && !isset($current[$key])) { $current[$key] = []; } $current = &$current[$key]; } return $current; }
业务调用示例
function example($keys) { $keys = ["a", "id"]; // 获取目标位置的引用 $targetRef = &$this->getNestedValueRef($this->data, $keys); // 修改引用直接作用于原数组,效果等价于 $this->data["a"]["id"] = "something" $targetRef = "something"; }
注意事项
- 所有赋值操作必须加上
&引用符号,否则会退化为值拷贝产生副本 - 关闭
autoCreate时如果键路径中某个键不存在,会抛出PHP警告,可按需补充异常捕获逻辑 - 该实现支持任意深度的多维数组,没有层数限制
内容的提问来源于stack exchange,提问作者Harmonic
相关产品推荐
相关产品推荐

