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

如何使用PHP根据键值修改数组列表的数据结构

按指定键值合并JSON数组结构的PHP实现

嘿,我猜你是想把重复用户的条目合并,把同一用户对应的多个paper_code整合到一个数组里对吧?看你代码写到一半,我来帮你补全并优化这个逻辑,实现按指定键值调整数组结构的需求。

原数据结构

先确认下你的原始输入数组(补全后):

<?php
$output = array(
    array(
        "first_name"=>"robin",
        "last_name"=>"sahoo",
        "reg_no"=>12,
        "paper_code"=>"BA001"
    ),
    array(
        "first_name"=>"robin",
        "last_name"=>"sahoo",
        "reg_no"=>12,
        "paper_code"=>"BA002"
    ),
    array(
        "first_name"=>"Rama",
        "last_name"=>"Nayidu",
        "reg_no"=>13,
        "paper_code"=>"BA001"
    )
);

实现按reg_no分组合并的完整代码

这里我们以reg_no作为唯一标识键,把同一个用户的paper_code合并成数组:

<?php
$output = array(
    array(
        "first_name"=>"robin",
        "last_name"=>"sahoo",
        "reg_no"=>12,
        "paper_code"=>"BA001"
    ),
    array(
        "first_name"=>"robin",
        "last_name"=>"sahoo",
        "reg_no"=>12,
        "paper_code"=>"BA002"
    ),
    array(
        "first_name"=>"Rama",
        "last_name"=>"Nayidu",
        "reg_no"=>13,
        "paper_code"=>"BA001"
    )
);

$result = array();

foreach ($output as $item) {
    // 用reg_no作为分组的唯一键
    $key = $item['reg_no'];
    
    if (!isset($result[$key])) {
        // 如果是第一次遇到该用户,初始化结构,把paper_code转成数组
        $result[$key] = $item;
        $result[$key]['paper_code'] = array($item['paper_code']);
    } else {
        // 如果用户已存在,追加新的paper_code到数组
        $result[$key]['paper_code'][] = $item['paper_code'];
    }
}

// 可选:如果需要移除关联键,转成索引数组
$result = array_values($result);

// 输出处理后的JSON
echo json_encode($result, JSON_PRETTY_PRINT);
?>

代码逻辑说明

  • 初始化空数组$result用来存储处理后的结果
  • 遍历原始数组的每个条目,用reg_no作为分组的唯一标识
  • 首次遇到某个reg_no时,将该用户信息存入$result,并把单个paper_code转换为数组
  • 再次遇到相同reg_no时,直接把新的paper_code追加到已有数组中
  • 最后用array_values()可以把关联数组转成索引数组(如果不需要保留reg_no作为键的话)

扩展:按多个键分组(比如姓名组合)

如果你想按first_name+last_name来分组(而不是reg_no),只需要修改分组键的生成逻辑:

// 用姓名组合作为分组键,避免reg_no重复的特殊情况
$key = $item['first_name'] . '|' . $item['last_name'];

处理后的输出结果

运行上面的代码后,你会得到如下格式化的JSON:

[
    {
        "first_name": "robin",
        "last_name": "sahoo",
        "reg_no": 12,
        "paper_code": [
            "BA001",
            "BA002"
        ]
    },
    {
        "first_name": "Rama",
        "last_name": "Nayidu",
        "reg_no": 13,
        "paper_code": [
            "BA001"
        ]
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:36:11