PHP 项目:统计球员评分最高者
下面给你一个完整的示例,包含数据、统计逻辑和输出。

基础版本(数组遍历)
<?php
// 球员数据:姓名 => 评分
$players = [
'梅西' => 9.8,
'姆巴佩' => 9.5,
'哈兰德' => 9.6,
'C罗' => 9.2,
'内马尔' => 9.3,
];
// 方法1:用 max() + array_search()
$maxScore = max($players);
$bestPlayer = array_search($maxScore, $players);
echo "最高分球员:{$bestPlayer},评分:{$maxScore}";
推荐版本(保留所有并列最高分)
<?php
$players = [
['name' => '梅西', 'score' => 9.8],
['name' => '姆巴佩', 'score' => 9.5],
['name' => '哈兰德', 'score' => 9.6],
['name' => 'C罗', 'score' => 9.8], // 并列最高
];
// 找出最高分
$max = max(array_column($players, 'score'));
// 筛选所有达到最高分的球员
$best = array_filter($players, fn($p) => $p['score'] == $max);
// 输出
foreach ($best as $p) {
echo "最高分:{$p['name']} - {$p['score']}\n";
}
从数据库统计(MySQL + PDO)
<?php
$pdo = new PDO('mysql:host=localhost;dbname=football;charset=utf8mb4', 'root', '123456');
// 方式1:只取一个
$sql = "SELECT name, score FROM players ORDER BY score DESC LIMIT 1";
$row = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);
echo "最高分:{$row['name']} - {$row['score']}";
// 方式2:取所有并列最高(子查询)
$sql = "SELECT name, score FROM players
WHERE score = (SELECT MAX(score) FROM players)";
$rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $r) {
echo "{$r['name']} - {$r['score']}\n";
}
按球队/赛季分组统计最高分
<?php
$players = [
['name' => '梅西', 'team' => 'A队', 'score' => 9.8],
['name' => '姆巴佩', 'team' => 'A队', 'score' => 9.5],
['name' => '哈兰德', 'team' => 'B队', 'score' => 9.6],
['name' => 'C罗', 'team' => 'B队', 'score' => 9.9],
];
$result = [];
foreach ($players as $p) {
$team = $p['team'];
if (!isset($result[$team]) || $p['score'] > $result[$team]['score']) {
$result[$team] = $p;
}
}
print_r($result);
/*
Array (
[A队] => ['name'=>'梅西','team'=>'A队','score'=>9.8]
[B队] => ['name'=>'C罗','team'=>'B队','score'=>9.9]
)
*/
关键点说明
| 场景 | 推荐做法 |
|---|---|
| 简单数组 | max() + array_search() |
| 需要并列 | max() + array_filter() |
| 数据库 | ORDER BY score DESC LIMIT 1 |
| 需要并列 | WHERE score = (SELECT MAX(score)...) |
| 分组统计 | foreach 动态比较,或 SQL GROUP BY |
如果你有具体的数据结构(比如从 API、Excel、数据库来的),可以把格式贴出来,我帮你写针对性的代码。