You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:39:00