如何在PHP中将按科目拆分的用户成绩数组重组为按用户聚合的目标数组
PHP 数组重组:将按科目分组的数据聚合为用户维度的结构
嘿,这个需求很常见,就是把分散的科目数据按用户聚合到同一个对象里对吧?我给你写一段简洁的PHP代码就能搞定,思路也很清晰:
实现思路
- 先创建一个空数组用来存放最终结果,用用户的
name作为临时键来分组,这样能快速判断当前用户是否已经被处理过 - 遍历原始数组的每一项,取出用户姓名、科目和分数
- 如果该用户还没在结果数组里,先初始化一个包含
name字段的数组 - 把当前科目作为新的键,分数作为对应的值,添加到该用户的数组中
- 最后把按姓名分组的关联数组转换成普通索引数组,就得到你想要的结构了
完整代码示例
<?php // 你的原始数据数组 $data = [ ['name' => 'jhon', 'subject' => 'bio', 'total' => 40], ['name' => 'jhon', 'subject' => 'chem', 'total' => 80], ['name' => 'jhon', 'subject' => 'geo', 'total' => 50], ['name' => 'jhon', 'subject' => 'art', 'total' => 100], ['name' => 'jane', 'subject' => 'bio', 'total' => 40], ['name' => 'jane', 'subject' => 'chem', 'total' => 80], ['name' => 'jane', 'subject' => 'geo', 'total' => 50], ['name' => 'jane', 'subject' => 'art', 'total' => 100] ]; $result = []; foreach ($data as $item) { $userName = $item['name']; // 初始化用户条目(如果还不存在) if (!isset($result[$userName])) { $result[$userName] = ['name' => $userName]; } // 将科目和分数映射到对应用户的条目里 $result[$userName][$item['subject']] = $item['total']; } // 转换为索引数组(如果不需要关联键的话) $result = array_values($result); // 输出结果 print_r($result); ?>
运行结果
这段代码执行后,$result的结构就和你想要的完全一致:
Array ( [0] => Array ( [name] => jhon [bio] => 40 [chem] => 80 [geo] => 50 [art] => 100 ) [1] => Array ( [name] => jane [bio] => 40 [chem] => 80 [geo] => 50 [art] => 100 ) )
这段代码很灵活,就算后续新增用户或者科目,也能自动适配,不用修改核心逻辑~
内容的提问来源于stack exchange,提问作者La paix
相关产品推荐
相关产品推荐

