PHP项目:统计传球成功率哪队更高
下面给你一个完整的 PHP 实现方案,包含思路、数据结构和可直接运行的代码。

需求分析
传球成功率 = 成功传球次数 ÷ 总传球次数 × 100%
要比较哪队更高,需要:
- 记录每次传球(属于哪队、成功/失败)
- 分球队统计成功数和总数
- 计算成功率并对比
数据准备(示例)
方案A:用数组模拟数据(适合测试)
$passes = [
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => false],
['team' => 'B', 'success' => true],
// ...
];
方案B:从数据库读取(推荐生产环境)
CREATE TABLE passes (
id INT AUTO_INCREMENT PRIMARY KEY,
match_id INT,
team ENUM('A','B'),
success TINYINT(1),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
完整 PHP 代码
<?php
// 1. 模拟数据(真实项目可换成数据库查询)
$passes = [
// A 队:15 次传球,12 次成功
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => false],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => false],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => false],
['team' => 'A', 'success' => true],
// B 队:12 次传球,9 次成功
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => false],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => false],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => false],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => true],
];
// 2. 统计
$stats = [];
foreach ($passes as $p) {
$team = $p['team'];
if (!isset($stats[$team])) {
$stats[$team] = ['total' => 0, 'success' => 0];
}
$stats[$team]['total']++;
if ($p['success']) {
$stats[$team]['success']++;
}
}
// 3. 计算成功率
foreach ($stats as $team => &$s) {
$s['rate'] = $s['total'] > 0
? round($s['success'] / $s['total'] * 100, 2)
: 0;
}
unset($s);
// 4. 输出结果
echo "球队传球数据:\n";
foreach ($stats as $team => $s) {
echo "球队 {$team}:成功 {$s['success']} / 总数 {$s['total']},成功率 {$s['rate']}%\n";
}
// 5. 判断哪队更高
$teams = array_keys($stats);
if (count($teams) >= 2) {
$t1 = $teams[0];
$t2 = $teams[1];
if ($stats[$t1]['rate'] > $stats[$t2]['rate']) {
echo "\n>>> 球队 {$t1} 传球成功率更高\n";
} elseif ($stats[$t1]['rate'] < $stats[$t2]['rate']) {
echo "\n>>> 球队 {$t2} 传球成功率更高\n";
} else {
echo "\n>>> 两队传球成功率相同\n";
}
}
输出示例
球队传球数据:
球队 A:成功 12 / 总数 15,成功率 80%
球队 B:成功 9 / 总数 12,成功率 75%
>>> 球队 A 传球成功率更高
用数据库实现(生产推荐)
<?php
$pdo = new PDO('mysql:host=localhost;dbname=football', 'root', 'password');
$sql = "SELECT
team,
COUNT(*) AS total,
SUM(success) AS success_count,
ROUND(SUM(success) / COUNT(*) * 100, 2) AS rate
FROM passes
WHERE match_id = :match_id
GROUP BY team
ORDER BY rate DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute([':match_id' => 1]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $i => $row) {
$tag = $i === 0 ? ' ← 最高' : '';
echo "{$row['team']} 队:{$row['success_count']}/{$row['total']} "
. "= {$row['rate']}%{$tag}\n";
}
输出:
A 队:12/15 = 80.00% ← 最高
B 队:9/12 = 75.00%
关键点提醒
| 问题 | 建议 |
|---|---|
| 除零错误 | 用 $total > 0 ? ... : 0 保护 |
| 浮点精度 | 用 round(..., 2) 或存整数百分比 |
| 平局判断 | 用 比较,不要用 > 否则会漏判 |
| 大量数据 | 直接用 SQL GROUP BY 聚合,避免全表 Load 到 PHP |
| 多场比赛 | 加 WHERE match_id = ? |
| 传球失败定义 | 明确是"被断"还是"出界",最好在表里加 reason |
扩展方向
- 增加按区域统计(前场/中场/后场传球成功率)
- 增加按球员统计,找出队内传球最稳的人
- 用 Chart.js 在前端可视化对比
- 结合
xG、向前传球比例做综合分析
如果你告诉我你的具体数据来源(数组 / MySQL / JSON)和字段结构,我可以直接帮你写出对应版本的代码。