PHP 项目:统计哪队传球成功率更高
下面给你一个完整可运行的 PHP 示例,演示如何统计两支球队的传球成功率,并判断哪队更高。

数据结构设计
<?php
// 传球数据:每支球队的传球总数 + 成功传球数
$teams = [
'TeamA' => [
'name' => '皇家马德里',
'total_passes' => 620,
'good_passes' => 540,
],
'TeamB' => [
'name' => '巴塞罗那',
'total_passes' => 680,
'good_passes' => 612,
],
];
计算传球成功率(核心函数)
/**
* 计算传球成功率(百分比)
* @param int $good 成功传球数
* @param int $total 总传球数
* @return float
*/
function passAccuracy(int $good, int $total): float
{
if ($total <= 0) {
return 0.0; // 防止除零
}
return round($good / $total * 100, 2);
}
比较两队,输出结果
$results = [];
foreach ($teams as $key => $team) {
$results[$key] = [
'name' => $team['name'],
'accuracy' => passAccuracy($team['good_passes'], $team['total_passes']),
];
}
// 按成功率降序排序
uasort($results, fn($a, $b) => $b['accuracy'] <=> $a['accuracy']);
// 输出排名
echo "====== 传球成功率排名 ======\n";
$rank = 1;
foreach ($results as $r) {
printf("%d. %s —— 成功率 %.2f%%\n", $rank++, $r['name'], $r['accuracy']);
}
// 判断哪队更高
$keys = array_keys($results);
$winner = $results[$keys[0]];
$runner = $results[$keys[1]];
echo "\n====== ======\n";
if ($winner['accuracy'] > $runner['accuracy']) {
printf("👉 %s 的传球成功率更高(%.2f%% vs %.2f%%),高出 %.2f 个百分点。\n",
$winner['name'],
$winner['accuracy'],
$runner['accuracy'],
$winner['accuracy'] - $runner['accuracy']
);
} else {
echo "两队传球成功率相同。\n";
}
运行结果示例
====== 传球成功率排名 ======
1. 巴塞罗那 —— 成功率 90.00%
2. 皇家马德里 —— 成功率 87.10%
====== ======
👉 巴塞罗那 的传球成功率更高(90.00% vs 87.10%),高出 2.90 个百分点。
进阶建议(真实项目可用)
| 场景 | 建议 |
|---|---|
| 数据来源 | 从数据库读:SELECT team_id, SUM(is_success) AS good, COUNT(*) AS total FROM passes GROUP BY team_id |
| 数据量大 | 用 SQL 直接算 SUM(is_success)/COUNT(*)*100,减少 PHP 运算 |
| 按球员/半场 | 增加 player_id、half 维度再分组 |
| 精度 | 用 number_format($v, 2) 统一格式化输出 |
| 避免除零 | 已在 passAccuracy() 中处理 $total <= 0 |
如果数据来自数据库(推荐写法)
$sql = "SELECT t.name,
COUNT(p.id) AS total,
SUM(p.is_success) AS good,
ROUND(SUM(p.is_success) / COUNT(p.id) * 100, 2) AS accuracy
FROM teams t
JOIN passes p ON p.team_id = t.id
GROUP BY t.id
ORDER BY accuracy DESC";
$rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
echo "传球成功率更高的球队:" . $rows[0]['name']
. "(" . $rows[0]['accuracy'] . "%)\n";
核心逻辑一句话:成功率 = 成功传球数 ÷ 总传球数 × 100%,比较两队该值,取大者。
需要我把它改成从 CSV / JSON 读取数据,或者加上按球员维度的传球成功率排名吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播