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

wen PHP项目 4

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

下面给你一个完整可运行的 PHP 示例,包含数据模拟、计算逻辑和结果输出,你可以直接替换成数据库查询数据。

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

核心思路

传球成功率公式:

传球成功率 = 成功传球数 / 总传球数 × 100%

比较两队数值,输出较高的一方。

完整代码示例

<?php
/**
 * 统计两队传球成功率,判断哪队更高
 */
// 1. 模拟数据(实际项目中从数据库读取)
// 结构:队名 => ['success' => 成功传球数, 'total' => 总传球数]
$teams = [
    '主队A' => ['success' => 412, 'total' => 500],
    '客队B' => ['success' => 380, 'total' => 480],
];
// 2. 计算成功率
$results = [];
foreach ($teams as $name => $stat) {
    if ($stat['total'] <= 0) {
        $results[$name] = 0.0; // 防止除零
    } else {
        $results[$name] = round($stat['success'] / $stat['total'] * 100, 2);
    }
}
// 3. 找出较高者
arsort($results); // 按成功率降序
$winner = array_key_first($results);
// 4. 输出结果
echo "===== 传球成功率对比 =====\n";
foreach ($results as $name => $rate) {
    printf("%-8s 成功率:%.2f%% (%d/%d)\n",
        $name,
        $rate,
        $teams[$name]['success'],
        $teams[$name]['total']
    );
}
echo "\n>>> 传球成功率更高的是:{$winner}({$results[$winner]}%)\n";

输出示例:

===== 传球成功率对比 =====
主队A     成功率:82.40% (412/500)
客队B     成功率:79.17% (380/480)
>>> 传球成功率更高的是:主队A(82.4%)

接入真实数据库(PDO)

<?php
$pdo = new PDO('mysql:host=localhost;dbname=football;charset=utf8mb4', 'root', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 假设有表 match_stats(team_name, pass_success, pass_total)
$sql = "
    SELECT team_name,
           SUM(pass_success) AS success,
           SUM(pass_total)   AS total,
           ROUND(SUM(pass_success) / NULLIF(SUM(pass_total),0) * 100, 2) AS rate
    FROM match_stats
    WHERE match_id = :match_id
    GROUP BY team_name
    ORDER BY rate DESC
";
$stmt = $pdo->prepare($sql);
$stmt->execute([':match_id' => 1001]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $i => $row) {
    echo ($i === 0 ? '🏆 ' : '   ') 
       . "{$row['team_name']}: {$row['rate']}% ({$row['success']}/{$row['total']})\n";
}

SQL 里用了 NULLIF(...,0) 防止除以零,ORDER BY rate DESC 直接拿到第一名。

边界情况处理建议

情况 处理
总传球为 0 用 NULLIF 或 PHP 判断,避免除零错误
两队成功率相同 可加 if ($results[$a] == $results[$b]) 返回"持平"
小数精度 round($x, 2) 保留两位
多场比赛汇总 用 SUM(success)/SUM(total),而不是各场比率的平均值(避免辛普森悖论)

如果要比较"每场都更高"?

如果需求是逐场对比而非汇总,可以这样:

$perMatch = [];  // match_id => [队名 => 成功率]
// ... 逐场计算后统计
$teamAWin = $teamBWin = 0;
foreach ($perMatch as $mid => $rates) {
    $a = $rates['主队A']; $b = $rates['客队B'];
    if ($a > $b) $teamAWin++;
    elseif ($b > $a) $teamBWin++;
}
echo "主队A 赢 {$teamAWin} 场,客队B 赢 {$teamBWin} 场\n";

判断"哪队传球成功率更高"就用 成功传球数 / 总传球数 比较即可;实际项目中优先在 SQL 层聚合计算(SUM + NULLIF 防除零 + ORDER BY 排序),PHP 层只做展示,性能更好且避免舍入误差。

需要我帮你写具体的表结构设计、Laravel 版本,或者加上可视化图表吗?

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

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