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

如何通过括号分隔的键路径字符串更新PHP多维关联数组指定值

实现方案

核心思路是先从$pattern中提取所有层级的键名,再通过引用传递逐层定位到数组的目标节点,最终完成赋值。

完整代码实现

<?php
// 示例初始数组
$array = [
    'store_name' => 'Jota',
    'social' => [
        'fb' => 'foo'
    ]
];

$pattern = "[social][fb];";
$value = "bar";

// 1. 提取pattern中的所有键名
preg_match_all('/\[([^\]]+)\]/', $pattern, $matches);
$keys = $matches[1]; // 得到键名数组:['social', 'fb']

// 2. 用引用逐层定位
$current = &$array;
foreach ($keys as $key) {
    // 如果当前层级不存在该键,自动创建空数组(可选,按需开启)
    if (!isset($current[$key])) {
        $current[$key] = [];
    }
    $current = &$current[$key];
}

// 3. 赋值更新
$current = $value;

// 销毁引用,避免后续意外修改
unset($current);

// 打印验证结果
print_r($array);
?>

代码说明

  • 正则/\[([^\]]+)\]/会匹配所有被方括号包裹的内容,自动过滤掉末尾的分号等无效字符
  • 使用引用&操作数组,不需要递归遍历,性能更高
  • 自动补全不存在层级的逻辑可以根据业务需求关闭,如果要求必须严格匹配已存在的键,删除自动创建的判断即可,匹配不到会抛出Notice提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:54:04