我有一个与下面类似的对象数组:
$scores = array(); // Bob round 1 $s = new RoundScore(); $s->Round_Name = 'Round 1'; $s->Player_Name = 'Bob'; $s->Score = 10; $scores[0] = $s; // Bob round 2 $s = new RoundScore(); $s->Round_Name = 'Round 2'; $s->Player_Name = 'Bob'; $s->Score = 7; $scores[1] = $s; // Jack round 1 $s = new RoundScore(); $s->Round_Name = 'Round 1'; $s->Player_Name = 'Jack'; $s->Score = 6; $scores[2] = $s; // Jack round 2 $s = new RoundScore(); $s->Round_Name = 'Round 2'; $s->Player_Name = 'Jack'; $s->Score = 12; $scores[3] = $s;
如果我循环并将$scores
对象转储到表中,它将看起来像这样:
Round_Name Player Score ---------------------------- Round 1 Bob 10 Round 2 Bob 7 Round 1 Jack 6 Round 2 Jack 12
然而,我想要的是这样的:
Player Round 1 Round 2 Total ------------------------------- Bob 10 7 17 Jack 6 12 18
我不会提前知道会有多少轮或球员,让我们说我无法改变对象的构造方式.
什么是在PHP中最有效的方法?
据我所知,PHP数组实现为哈希表(因此查找/更新应该非常有效)无论如何,时间效率甚至会成为问题吗?
我会以"简单"的方式做到这一点:
$table = array(); $round_names = array(); $total = array(); foreach ($scores as $score) { $round_names[] = $score->Round_Name; $table[$score->Player_Name][$score->Round_Name] = $score->score; $total[$score->Player_Name] += $score->score; } $round_names = array_unique($round_names); foreach ($table as $player => $rounds) { echo "$player\t"; foreach ($round_names as $round) echo "$rounds[$round]\t"; echo "$total[$player]\n"; }
(我知道数组没有正确初始化,但你明白了)