PHP 项目:统计哪队传球成功率更高
下面给你一个完整可运行的 PHP 示例,包含数据模拟、计算逻辑和结果输出,你可以直接替换成数据库查询数据。

核心思路
传球成功率公式:
传球成功率 = 成功传球数 / 总传球数 × 100%
比较两队数值,输出较高的一方。
完整代码示例
<?php
/**
* 统计两队传球成功率,判断哪队更高
*/
// 1. 模拟数据(实际项目中从数据库读取)
// 结构:队名 => ['success' => 成功传球数, 'total' => 总传球数]
$teams = [
'主队A' => ['success' => 412, 'total' => 500],
'客队B' => ['success' => 380, 'total' => 480],
];
// 2. 计算成功率
$results = [];
foreach ($teams as $name => $stat) {
if ($stat['total'] <= 0) {
$results[$name] = 0.0; // 防止除零
} else {
$results[$name] = round($stat['success'] / $stat['total'] * 100, 2);
}
}
// 3. 找出较高者
arsort($results); // 按成功率降序
$winner = array_key_first($results);
// 4. 输出结果
echo "===== 传球成功率对比 =====\n";
foreach ($results as $name => $rate) {
printf("%-8s 成功率:%.2f%% (%d/%d)\n",
$name,
$rate,
$teams[$name]['success'],
$teams[$name]['total']
);
}
echo "\n>>> 传球成功率更高的是:{$winner}({$results[$winner]}%)\n";
输出示例:
===== 传球成功率对比 =====
主队A 成功率:82.40% (412/500)
客队B 成功率:79.17% (380/480)
>>> 传球成功率更高的是:主队A(82.4%)
接入真实数据库(PDO)
<?php
$pdo = new PDO('mysql:host=localhost;dbname=football;charset=utf8mb4', 'root', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 假设有表 match_stats(team_name, pass_success, pass_total)
$sql = "
SELECT team_name,
SUM(pass_success) AS success,
SUM(pass_total) AS total,
ROUND(SUM(pass_success) / NULLIF(SUM(pass_total),0) * 100, 2) AS rate
FROM match_stats
WHERE match_id = :match_id
GROUP BY team_name
ORDER BY rate DESC
";
$stmt = $pdo->prepare($sql);
$stmt->execute([':match_id' => 1001]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $i => $row) {
echo ($i === 0 ? '🏆 ' : ' ')
. "{$row['team_name']}: {$row['rate']}% ({$row['success']}/{$row['total']})\n";
}
SQL 里用了 NULLIF(...,0) 防止除以零,ORDER BY rate DESC 直接拿到第一名。
边界情况处理建议
| 情况 | 处理 |
|---|---|
| 总传球为 0 | 用 NULLIF 或 PHP 判断,避免除零错误 |
| 两队成功率相同 | 可加 if ($results[$a] == $results[$b]) 返回"持平" |
| 小数精度 | round($x, 2) 保留两位 |
| 多场比赛汇总 | 用 SUM(success)/SUM(total),而不是各场比率的平均值(避免辛普森悖论) |
如果要比较"每场都更高"?
如果需求是逐场对比而非汇总,可以这样:
$perMatch = []; // match_id => [队名 => 成功率]
// ... 逐场计算后统计
$teamAWin = $teamBWin = 0;
foreach ($perMatch as $mid => $rates) {
$a = $rates['主队A']; $b = $rates['客队B'];
if ($a > $b) $teamAWin++;
elseif ($b > $a) $teamBWin++;
}
echo "主队A 赢 {$teamAWin} 场,客队B 赢 {$teamBWin} 场\n";
判断"哪队传球成功率更高"就用 成功传球数 / 总传球数 比较即可;实际项目中优先在 SQL 层聚合计算(SUM + NULLIF 防除零 + ORDER BY 排序),PHP 层只做展示,性能更好且避免舍入误差。
需要我帮你写具体的表结构设计、Laravel 版本,或者加上可视化图表吗?
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播