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

PHP如何将路径字符串转为多维数组键并替换id对应值

方法1:递归遍历过程中直接修改(推荐)

不需要额外解析路径,直接在现有递归逻辑基础上给数组加引用传递,找到id时直接赋值即可,性能更高也不易出错。
修改后代码如下:

$arr = json_decode($json, true);
// 你的id映射表,存储旧id到新id的对应关系
$idMap = [
    '1141159925645373' => 'new_id_1',
    '1141168515579912' => 'new_id_2',
    // 补充其余映射规则
];

function arrayFind($path, &$a, $idMap) {
    foreach ($a as $k => &$v) { // $v加&标记为引用,修改时直接作用于原数组
        if (is_array($v)){
            $p = $path === "" ? $k : $path . "|" . $k;
            arrayFind($p, $v, $idMap);
        } else {
            if ($k === "id") {
                // 查表替换值
                if (isset($idMap[$v])) {
                    $a[$k] = $idMap[$v];
                }
                // 可保留原有输出逻辑
                // echo $path . "|" . $k . " => " . $a[$k] . "\n";
            }
        }
    }
    // 解除引用,避免后续逻辑意外污染数组
    unset($v);
}

arrayFind("", $arr, $idMap);
// 此时$arr已经是id替换完成的数组,直接使用即可

方法2:解析现有路径字符串修改

如果你确实需要将已生成的|分隔路径转换为数组访问形式,可通过引用逐层遍历路径片段实现,不要使用eval避免安全风险:

直接修改原数组的实现:

// 示例路径和要设置的新值
$pathStr = "6|staffAssignments|0|ids|0|id";
$newId = "your_new_id";

function setValueByPath(&$arr, string $pathStr, $newValue, string $delimiter = '|'): bool {
    $keyList = explode($delimiter, $pathStr);
    $current = &$arr;
    foreach ($keyList as $key) {
        // 可根据需求增加键不存在的异常处理
        if (!isset($current[$key])) {
            return false;
        }
        $current = &$current[$key];
    }
    $current = $newValue;
    unset($current);
    return true;
}

// 调用即可修改原数组对应路径的值
setValueByPath($arr, $pathStr, $newId);

生成字面量代码字符串的实现:

如果需要输出类似$arr[6]["staffAssignments"][0]["ids"][0]["id"] = "newValue"的代码字符串,可按如下方式处理:

$pathStr = "6|staffAssignments|0|ids|0|id";
$keyList = explode('|', $pathStr);
$code = '$arr';
foreach ($keyList as $key) {
    $code .= is_numeric($key) ? "[$key]" : '["' . addslashes($key) . '"]';
}
$code .= ' = "newValue";';
// 输出结果即为你需要的字面量代码
echo $code;

内容的提问来源于stack exchange,提问作者user3231130

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:00:04