本文目录导读:

要统计两支球队的传球成功率,你需要有一个数据结构来存储传球事件,下面我给出一个完整的 PHP 示例代码,涵盖数据定义、统计计算和结果输出。
数据结构定义
假设每一条传球记录包含:
team:球队名(A 或 B)success:是否成功(true/false 或 1/0)
<?php
// 模拟传球数据(实际项目中通常来自数据库)
$passes = [
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => false],
['team' => 'A', 'success' => true],
['team' => 'B', 'success' => false],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => true],
['team' => 'A', 'success' => true],
['team' => 'B', 'success' => false],
// ... 更多数据
];
?>
统计每队传球成功率的函数
function calculatePassSuccessRate(array $passes): array
{
$stats = [];
foreach ($passes as $pass) {
$team = $pass['team'];
$success = $pass['success'];
// 初始化队伍统计
if (!isset($stats[$team])) {
$stats[$team] = [
'total' => 0, // 总传球数
'success' => 0, // 成功传球数
'rate' => 0.0 // 成功率
];
}
// 累加数据
$stats[$team]['total']++;
if ($success) {
$stats[$team]['success']++;
}
}
// 计算每个队的成功率
foreach ($stats as &$teamStat) {
if ($teamStat['total'] > 0) {
$teamStat['rate'] = $teamStat['success'] / $teamStat['total'] * 100;
}
}
unset($teamStat);
return $stats;
}
对比哪队传球成功率更高
function compareTeams(array $stats): string
{
if (count($stats) < 2) {
return "数据不足,无法比较两队";
}
// 按成功率降序排序
uasort($stats, function($a, $b) {
return $b['rate'] <=> $a['rate'];
});
$teams = array_keys($stats);
$topTeam = $teams[0];
$secondTeam = $teams[1];
// 如果两队成功率相同(精确到小数后)
if (abs($stats[$topTeam]['rate'] - $stats[$secondTeam]['rate']) < 0.0001) {
return "两队传球成功率相同";
}
return "{$topTeam}队更高 ({$stats[$topTeam]['rate']}%)";
}
完整运行示例
<?php
// 模拟数据
$passes = [
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => false],
['team' => 'A', 'success' => true],
['team' => 'A', 'success' => true],
['team' => 'B', 'success' => false],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => true],
['team' => 'B', 'success' => false],
];
// 统计
$stats = calculatePassSuccessRate($passes);
// 输出结果
echo "各队传球统计:\n";
foreach ($stats as $team => $data) {
printf(
"%s队:总传球 %d 次,成功 %d 次,成功率 %.1f%%\n",
$team,
$data['total'],
$data['success'],
$data['rate']
);
}
echo "\n比较结果:";
echo compareTeams($stats) . "\n";
?>
输出示例:
各队传球统计:
A队:总传球 4 次,成功 3 次,成功率 75.0%
B队:总传球 5 次,成功 3 次,成功率 60.0%
比较结果:
A队更高 (75%)
如果是数据库数据
如果你是从数据库(如 MySQL)获取传球数据,可以直接用 SQL 聚合:
SELECT
team,
COUNT(*) AS total_passes,
SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) AS successful_passes,
ROUND(SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS success_rate
FROM pass_records
GROUP BY team
ORDER BY success_rate DESC;
然后在 PHP 中取出结果比较第一行和第二行的 success_rate 即可。
注意事项
- 如果传球记录较少,成功率可能会因偶然性较大,建议结合比赛场景分析。
- 实际项目中,
success字段通常用 0 或 1 表示。 - 对于足球等体育项目,通常也会区分关键传球、长传等维度,如需更细分类,可类似扩展数据结构。