php项目统计传球成功率哪队更高?

wen PHP项目 1

本文目录导读:

php项目统计传球成功率哪队更高?

  1. 数据结构定义
  2. 统计每队传球成功率的函数
  3. 对比哪队传球成功率更高
  4. 完整运行示例
  5. 如果是数据库数据
  6. 注意事项

要统计两支球队的传球成功率,你需要有一个数据结构来存储传球事件,下面我给出一个完整的 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 表示。
  • 对于足球等体育项目,通常也会区分关键传球长传等维度,如需更细分类,可类似扩展数据结构。

抱歉,评论功能暂时关闭!