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

如何按字符串模式遍历并操作PHP多维关联数组

PHP多维数组按方括号字符串模式读取与更新方案

核心思路

不管是读取还是更新,第一步都是从模式字符串中解析出层级键名列表:通过正则匹配提取所有[]包裹的键值,得到类似['social', 'fb']的层级键数组,再逐层遍历数组操作即可。


问题1:按模式字符串读取对应值

实现代码

/**
 * 按模式字符串读取多维数组的值
 * @param array $array 要操作的目标数组
 * @param string $pattern 方括号拼接的模式字符串,如 data[social][fb]
 * @return mixed 匹配到的值,键不存在返回null
 */
function get_array_value(array $array, string $pattern) {
    // 提取所有中括号内的键名
    preg_match_all('/\[([^\]]+)\]/', $pattern, $matches);
    $keys = $matches[1] ?? [];
    if (empty($keys)) return null;

    $current = $array;
    foreach ($keys as $key) {
        if (!isset($current[$key])) {
            return null;
        }
        $current = $current[$key];
    }
    return $current;
}

调用示例

// 测试数组
$data = [
    'store_name' => 'Jota',
    'social' => [
        'fb' => 78,
        'youtube' => 34,
        'twitter' => 97,
        'linkedin' => 23,
        'pinterest' => 12,
        'instagram' => 93,
        'flickr' => 45
    ]
];
$input = "data[social][fb]";
echo get_array_value($data, $input); // 输出 78

问题2:按模式字符串更新对应值

注意数组参数要加引用符号&,否则修改不会作用到原数组。

实现代码

/**
 * 按模式字符串更新多维数组的值
 * @param array $array 要操作的目标数组(引用传参)
 * @param string $pattern 方括号拼接的模式字符串,如 data[social][fb]
 * @param mixed $value 要设置的新值
 * @return bool 更新成功返回true
 */
function update_array(array &$array, string $pattern, $value): bool {
    // 提取所有中括号内的键名
    preg_match_all('/\[([^\]]+)\]/', $pattern, $matches);
    $keys = $matches[1] ?? [];
    if (empty($keys)) return false;

    $current = &$array;
    // 弹出最后一级键名,先遍历前面的层级
    $last_key = array_pop($keys);
    foreach ($keys as $key) {
        // 若中间层级不存在,可选择自动创建数组,或者抛出错误/返回false
        if (!isset($current[$key]) || !is_array($current[$key])) {
            $current[$key] = [];
        }
        $current = &$current[$key];
    }
    // 给最后一级键赋值
    $current[$last_key] = $value;
    return true;
}

注:如果要求层级键必须已存在才能更新,删除自动创建数组的逻辑,改为键不存在时直接返回false即可。

调用示例

$pattern = "data[social][fb]";
$value = "foo";
update_array($data, $pattern, $value);
echo $data['social']['fb']; // 输出 foo

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:24:04