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

wen PHP项目 2

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

下面给你一个完整的 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) 保留两位小数

扩展建议

  1. 按比赛维度统计:加 WHERE match_id = ?
  2. 按半场统计:加 half 字段
  3. 可视化:输出 JSON 给前端用 ECharts 画柱状图
  4. 缓存:高频查询可写入 Redis

需要我帮你扩展成 按球员统计按比赛分半场统计API 接口版本 吗?

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