PHP中将数组值作为另一数组的键路径完成赋值的实现方法
PHP 按键路径为多维数组赋值实现方案
实现逻辑
兼容两种输入场景,核心通过引用遍历键路径,逐层创建不存在的数组维度,最后给最终层级的键赋值。
- 场景1直接使用传入的键数组遍历
- 场景2先把分隔符拼接的键路径字符串切割为键数组,再执行遍历赋值逻辑
完整实现代码
/** * 按键路径为多维数组赋值 * @param array $target 目标多维数组,传引用直接修改原数组 * @param array|string $keys 键数组 或 分隔符拼接的键路径字符串 * @param mixed $value 待赋值内容 * @param string $delimiter 键路径分隔符,默认/ * @return void */ function array_assign_by_path(&$target, $keys, $value, $delimiter = '/') { // 字符串键路径转键数组 if (is_string($keys)) { $keys = explode($delimiter, trim($keys, $delimiter)); } // 引用遍历逐层构建数组 $current = &$target; foreach ($keys as $key) { // 层级不存在或不是数组时,初始化为空数组 if (!isset($current[$key]) || !is_array($current[$key])) { $current[$key] = []; } $current = &$current[$key]; } // 最终层级赋值 $current = $value; }
两种场景调用示例
场景1:直接传入键数组与待赋值内容
// 输入 $keyList = ['a', 'b', 'c']; $r = 'result'; // 初始化目标数组 $target = []; // 调用函数 array_assign_by_path($target, $keyList, $r); // 验证结果 print_r($target); // 输出:Array ( [a] => Array ( [b] => Array ( [c] => result ) ) )
场景2:传入包含分隔键路径与值的对象
// 输入 $obj = ['name'=>'a/b/c', 'value'=>'result']; // 初始化目标数组 $target = []; // 调用函数 array_assign_by_path($target, $obj['name'], $obj['value']); // 验证结果 print_r($target); // 输出:Array ( [a] => Array ( [b] => Array ( [c] => result ) ) )
额外说明
- 如果键路径使用其他分隔符,比如
.,调用函数时传入第四个参数为对应分隔符即可 - 若键路径对应的层级已存在非数组值,会自动覆盖为数组再继续赋值
内容的提问来源于stack exchange,提问作者user17279031
相关产品推荐
相关产品推荐

