【发布时间】:2021-06-24 02:47:09
【问题描述】:
在PHP 中的这个简单游戏的联赛表结构中,我们想要跟踪联赛中每个玩家的得分,我们使用以下代码传递并定义玩家的每个得分:
$table->save_result('Albert', 2); //albert with 2 score
$table->save_result('Albert', 3);//albert with 3 score
这里有一些提示:
玩家在联赛中的排名使用以下逻辑计算:
- 1-得分最高的玩家排名第一(排名1)。得分最低的玩家排名最后。
- 2- 如果两名球员得分相同,则打过的球员 最少的游戏排名较高。
用分数保存玩家的基类:
class Table
{
private $standings = [];
public function __construct(array $players)
{
$this->data = [];
foreach($players as $key => $p) {
$this->data[$p] = [
'key' => $key,
'games_played' => 0,
'player_score' => 0
];
}
}
public function save_result(string $player, int $score)
{
$this->data[$player]['games_played']++;
$this->data[$player]['player_score'] += $score;
}
}
现在我们有两个得分相同的玩家,例如:
$table->save_result('Pele', 5);
$table->save_result('Zidane', 5);
现在如果两个玩家得分相同,那么先打过的玩家,然后是排名更高的玩家列表中的第一名。
然而,Pele 和 Zidane 的比赛次数比 Mike 少,并且由于 Zidane 在玩家列表中排在 Pele 之前,因此他排名第一。因此。正确的结果应该是Zidane,例如:
$table = new Table(array('Albert', 'Pele', 'Zidane'));
$table->save_result('Albert', 2); //albert with 2 score
$table->save_result('Albert', 3);//albert with 3 score
$table->save_result('Pele', 5);
$table->save_result('Zidane', 5);
echo $table->get_rank_result(1);
我们如何在下面的函数中计算这个分数?我做不到
public function get_rank_result(int $rank) : string
{
// should be return 'Zidane';
}
【问题讨论】:
-
如果这是连续流,或者它已经有一组定义的数据?
-
@nice_dev 应该有一组已定义的数据
-
那么你可以简单地使用
usort() -
@nice_dev 你能帮我怎么用吗?
-
这能回答你的问题吗? In php how does usort() function works
标签: php