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

如何在PHP中将按科目拆分的用户成绩数组重组为按用户聚合的目标数组

PHP 数组重组:将按科目分组的数据聚合为用户维度的结构

嘿,这个需求很常见,就是把分散的科目数据按用户聚合到同一个对象里对吧?我给你写一段简洁的PHP代码就能搞定,思路也很清晰:

实现思路

  1. 先创建一个空数组用来存放最终结果,用用户的name作为临时键来分组,这样能快速判断当前用户是否已经被处理过
  2. 遍历原始数组的每一项,取出用户姓名、科目和分数
  3. 如果该用户还没在结果数组里,先初始化一个包含name字段的数组
  4. 把当前科目作为新的键,分数作为对应的值,添加到该用户的数组中
  5. 最后把按姓名分组的关联数组转换成普通索引数组,就得到你想要的结构了

完整代码示例

<?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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:07:35