PHP 项目统计传球成功率哪队更高
下面给你一个完整的 PHP 实现方案,用于统计两支球队的传球成功率并判断哪队更高。

数据准备
假设你有一个传球记录表 passes:
CREATE TABLE passes (
id INT PRIMARY KEY AUTO_INCREMENT,
match_id INT,
team VARCHAR(50), -- 球队名称
player VARCHAR(50), -- 传球球员
is_success TINYINT(1) -- 1=成功 0=失败
);
示例数据:
| team | is_success |
|---|---|
| 红队 | 1 |
| 红队 | 0 |
| 蓝队 | 1 |
| 蓝队 | 1 |
纯 PHP 数组统计(不依赖数据库)
<?php
// 模拟传球数据
$passes = [
['team' => '红队', 'is_success' => 1],
['team' => '红队', 'is_success' => 1],
['team' => '红队', 'is_success' => 0],
['team' => '红队', 'is_success' => 1],
['team' => '蓝队', 'is_success' => 1],
['team' => '蓝队', 'is_success' => 0],
['team' => '蓝队', 'is_success' => 0],
['蓝队' => '蓝队', 'is_success' => 1], // 注意这里应为 'team'
];
// 统计每队总传球数和成功数
$stats = [];
foreach ($passes as $p) {
$team = $p['team'];
if (!isset($stats[$team])) {
$stats[$team] = ['total' => 0, 'success' => 0];
}
$stats[$team]['total']++;
if ($p['is_success'] == 1) {
$stats[$team]['success']++;
}
}
// 计算成功率
$rates = [];
foreach ($stats as $team => $s) {
$rates[$team] = $s['total'] > 0
? round($s['success'] / $s['total'] * 100, 2)
: 0;
echo "{$team}: 传球 {$s['total']} 次,成功 {$s['success']} 次,成功率 {$rates[$team]}%\n";
}
// 判断哪队更高
arsort($rates);
$teams = array_keys($rates);
if (count($rates) >= 2 && $rates[$teams[0]] == $rates[$teams[1]]) {
echo "两队传球成功率相同!\n";
} else {
echo "传球成功率更高的是:{$teams[0]},成功率 {$rates[$teams[0]]}%\n";
}
数据库版本(PDO)
<?php
$pdo = new PDO('mysql:host=localhost;dbname=football;charset=utf8mb4', 'root', '123456');
$matchId = 1001;
// MySQL 直接聚合计算
$sql = "SELECT team,
COUNT(*) AS total,
SUM(is_success) AS success,
ROUND(SUM(is_success) / COUNT(*) * 100, 2) AS rate
FROM passes
WHERE match_id = ?
GROUP BY team
ORDER BY rate DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute([$matchId]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $r) {
echo "{$r['team']}: {$r['success']}/{$r['total']} = {$r['rate']}%\n";
}
// 判断
if (count($rows) >= 2) {
if ($rows[0]['rate'] == $rows[1]['rate']) {
echo "两队传球成功率相同!\n";
} else {
echo "传球成功率更高的是:{$rows[0]['team']}\n";
}
}
关键点说明
| 项目 | 说明 |
|---|---|
| 成功率公式 | 成功次数 / 总传球次数 × 100% |
| 排序 | 用 arsort() 或 SQL ORDER BY rate DESC |
| 并列情况 | 需判断前两名成功率是否相等 |
| 防止除零 | 总数>0 时才计算比率 |
| 精度 | round(..., 2) 保留两位小数 |
扩展建议
- 按比赛维度统计:加
WHERE match_id = ? - 按半场统计:加
half字段 - 可视化:输出 JSON 给前端用 ECharts 画柱状图
- 缓存:高频查询可写入 Redis
需要我帮你扩展成 按球员统计、按比赛分半场统计 或 API 接口版本 吗?
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播