如何使用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
相关产品推荐
相关产品推荐

