关于数据构建一个数据表的问题,有没有快一点的方式构建出想要的数据表

数据库查询出来的结构是这样的

$data = [
            [
                'id' => 1,
                'category' => 'aaa',
                'rank' => '#1',
                'score' => 50,
            ],
            [
                'id' => 2,
                'category' => 'bbb',
                'rank' => '#1',
                'score' => 150,
            ],
            [
                'id' => 3,
                'category' => 'ccc',
                'rank' => '#1',
                'score' => 98,
            ],
            [
                'id' => 4,
                'category' => 'aaa',
                'rank' => '#2',
                'score' => 222,
            ],
            [
                'id' => 5,
                'category' => 'bbb',
                'rank' => '#2',
                'score' => 220,
            ],
            [
                'id' => 6,
                'category' => 'ccc',
                'rank' => '#2',
                'score' => 33,
            ]

        ];

我想在前端展示出来的是这样的

        aaa   bbb  ccc
    #1  50    150  98
    #2  222   220  33  
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

图挂了,写代码块吧

3年前 评论
study_laraveler (楼主) 3年前
LiamHao (作者) 3年前
study_laraveler (楼主) 3年前
study_laraveler (楼主) 3年前
$categoryList = array_unique(array_column($data, 'category'));
array_unshift($categoryList, '');
$a = [];
foreach ($data as $val) {
    $a[$val['category']][$val['rank']] = $val['score'];
}
$b = [$categoryList];
for ($i = 1; $i < 3; $i++) {
    $topRank = '#' . $i;
    $rowData = array($topRank);
    foreach ($a as $key => $val) {
         $rowData[] = $a[$key][$topRank];
    }
    $b[] = $rowData;
}
dd($b);

结果:

array:3 [0 => array:4 [0 => ""
    1 => "aaa"
    2 => "bbb"
    3 => "ccc"
  ]
  1 => array:4 [0 => "#1"
    1 => 50
    2 => 150
    3 => 98
  ]
  2 => array:4 [0 => "#2"
    1 => 222
    2 => 220
    3 => 33
  ]
]
3年前 评论

@study_laraveler :cry: 我个人觉得你那个格式对于前端来说,太不规范了。当然,以能用就行来说,也挺好的。想必弄成这种格式肯定是要做表格吧,那肯定需要有对应的表头。你的那个数据格式,一旦category过多,对于前端来说,对比数据就太费劲了。我这里就抛个砖吧:

$data_collect = collect($data);

$result = $data_collect
  ->pluck('rank')
  ->unique()
  ->map(function ($rank) use ($data_collect) {

    $row = [
      'rank' => $rank,
    ];

    $data_collect
    ->where('rank', $rank)
    ->map(function ($cell) use (&$row) {
      $row[$cell['category']] = $cell['score'];
    });

    return $row;
  })
  ->toArray();

dd($result);

结果:

array:2 [0 => array:4 ["rank" => "#1"
    "aaa" => 50
    "bbb" => 150
    "ccc" => 98
  ]
  3 => array:4 ["rank" => "#2"
    "aaa" => 222
    "bbb" => 220
    "ccc" => 33
  ]
]
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!