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

wen PHP项目 3

PHP 项目:统计哪队传球成功率更高

下面给你一个完整可运行的 PHP 示例,演示如何统计两支球队的传球成功率,并判断哪队更高。

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

数据结构设计

<?php
// 传球数据:每支球队的传球总数 + 成功传球数
$teams = [
    'TeamA' => [
        'name'         => '皇家马德里',
        'total_passes' => 620,
        'good_passes'  => 540,
    ],
    'TeamB' => [
        'name'         => '巴塞罗那',
        'total_passes' => 680,
        'good_passes'  => 612,
    ],
];

计算传球成功率(核心函数)

/**
 * 计算传球成功率(百分比)
 * @param int $good  成功传球数
 * @param int $total 总传球数
 * @return float
 */
function passAccuracy(int $good, int $total): float
{
    if ($total <= 0) {
        return 0.0; // 防止除零
    }
    return round($good / $total * 100, 2);
}

比较两队,输出结果

$results = [];
foreach ($teams as $key => $team) {
    $results[$key] = [
        'name'     => $team['name'],
        'accuracy' => passAccuracy($team['good_passes'], $team['total_passes']),
    ];
}
// 按成功率降序排序
uasort($results, fn($a, $b) => $b['accuracy'] <=> $a['accuracy']);
// 输出排名
echo "====== 传球成功率排名 ======\n";
$rank = 1;
foreach ($results as $r) {
    printf("%d. %s —— 成功率 %.2f%%\n", $rank++, $r['name'], $r['accuracy']);
}
// 判断哪队更高
$keys = array_keys($results);
$winner = $results[$keys[0]];
$runner = $results[$keys[1]];
echo "\n====== ======\n";
if ($winner['accuracy'] > $runner['accuracy']) {
    printf("👉 %s 的传球成功率更高(%.2f%% vs %.2f%%),高出 %.2f 个百分点。\n",
        $winner['name'],
        $winner['accuracy'],
        $runner['accuracy'],
        $winner['accuracy'] - $runner['accuracy']
    );
} else {
    echo "两队传球成功率相同。\n";
}

运行结果示例

====== 传球成功率排名 ======
1. 巴塞罗那 —— 成功率 90.00%
2. 皇家马德里 —— 成功率 87.10%
====== ======
👉 巴塞罗那 的传球成功率更高(90.00% vs 87.10%),高出 2.90 个百分点。

进阶建议(真实项目可用)

场景 建议
数据来源 从数据库读:SELECT team_id, SUM(is_success) AS good, COUNT(*) AS total FROM passes GROUP BY team_id
数据量大 用 SQL 直接算 SUM(is_success)/COUNT(*)*100,减少 PHP 运算
按球员/半场 增加 player_id、half 维度再分组
精度 用 number_format($v, 2) 统一格式化输出
避免除零 已在 passAccuracy() 中处理 $total <= 0

如果数据来自数据库(推荐写法)

$sql = "SELECT t.name,
               COUNT(p.id) AS total,
               SUM(p.is_success) AS good,
               ROUND(SUM(p.is_success) / COUNT(p.id) * 100, 2) AS accuracy
        FROM teams t
        JOIN passes p ON p.team_id = t.id
        GROUP BY t.id
        ORDER BY accuracy DESC";
$rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
echo "传球成功率更高的球队:" . $rows[0]['name']
   . "(" . $rows[0]['accuracy'] . "%)\n";

核心逻辑一句话:成功率 = 成功传球数 ÷ 总传球数 × 100%,比较两队该值,取大者。

需要我把它改成从 CSV / JSON 读取数据,或者加上按球员维度的传球成功率排名吗?

上一篇php项目认为战术克制关系能量化吗?

下一篇当前分类已是最新一篇

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

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝