php项目统计射门次数哪队更多?

wen PHP项目 1

PHP项目统计射门次数哪队更多

下面给你一个完整的PHP示例,用于统计两支球队的射门次数并判断哪队更多。

php项目统计射门次数哪队更多?

基础版本(数组统计)

<?php
// 模拟射门数据:每一条代表一次射门
$shots = [
    ['team' => 'A队', 'player' => '张三', 'minute' => 12],
    ['team' => 'B队', 'player' => '李四', 'minute' => 18],
    ['team' => 'A队', 'player' => '王五', 'minute' => 25],
    ['team' => 'A队', 'player' => '张三', 'minute' => 33],
    ['team' => 'B队', 'player' => '赵六', 'minute' => 45],
    ['team' => 'B队', 'player' => '李四', 'minute' => 58],
    ['team' => 'B队', 'player' => '孙七', 'minute' => 70],
];
// 统计每队射门次数
$counts = [];
foreach ($shots as $shot) {
    $team = $shot['team'];
    $counts[$team] = ($counts[$team] ?? 0) + 1;
}
// 输出结果
echo "射门统计:\n";
foreach ($counts as $team => $num) {
    echo "{$team}: {$num} 次\n";
}
// 判断哪队更多
$maxTeam = array_search(max($counts), $counts);
echo "\n射门次数最多的队伍是:{$maxTeam}(" . max($counts) . " 次)\n";

输出:

射门统计:
A队: 3 次
B队: 4 次
射门次数最多的队伍是:B队(4 次)

从数据库统计(MySQL + PDO)

如果是真实项目,数据通常存在数据库里。

数据表结构

CREATE TABLE shots (
    id INT AUTO_INCREMENT PRIMARY KEY,
    match_id INT NOT NULL,
    team VARCHAR(50) NOT NULL,
    player VARCHAR(50),
    minute INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

PHP 统计代码

<?php
$pdo = new PDO('mysql:host=localhost;dbname=football;charset=utf8mb4', 'root', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$matchId = 1001; // 指定比赛
// SQL 直接按队伍分组统计
$sql = "SELECT team, COUNT(*) AS shots 
        FROM shots 
        WHERE match_id = :match_id 
        GROUP BY team 
        ORDER BY shots DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute([':match_id' => $matchId]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 输出
echo "比赛 {$matchId} 射门统计:\n";
foreach ($result as $row) {
    echo "{$row['team']}: {$row['shots']} 次\n";
}
// 判断哪队更多(结果按 shots 倒序,第一个就是最多)
if (!empty($result)) {
    $top = $result[0];
    $isTie = count($result) > 1 && $result[0]['shots'] === $result[1]['shots'];
    if ($isTie) {
        echo "\n双方射门次数相同:{$top['shots']} 次\n";
    } else {
        echo "\n射门更多的队伍是:{$top['team']}({$top['shots']} 次)\n";
    }
}

进阶:一次性拿到两队对比 + 射正率

<?php
$pdo = new PDO('mysql:host=localhost;dbname=football;charset=utf8mb4', 'root', 'password');
$sql = "SELECT 
            team,
            COUNT(*) AS total_shots,
            SUM(is_on_target) AS on_target_shots,
            ROUND(SUM(is_on_target) / COUNT(*) * 100, 1) AS accuracy
        FROM shots
        WHERE match_id = ?
        GROUP BY team
        ORDER BY total_shots DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute([1001]);
$stats = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($stats as $s) {
    printf("%s:射门 %d 次,射正 %d 次,射正率 %s%%\n",
        $s['team'], $s['total_shots'], $s['on_target_shots'], $s['accuracy']);
}
// 判断更多的一方
if (count($stats) === 2) {
    echo $stats[0]['total_shots'] === $stats[1]['total_shots']
        ? "\n两队射门次数相同\n"
        : "\n射门更多:{$stats[0]['team']}\n";
}

关键点总结

要点 说明
统计核心 用 GROUP BY team + COUNT(*) 最简洁
判断更多 按 COUNT(*) DESC 排序,取第一条
平局处理 比较前两条记录的次数是否相等
性能优化 给 match_id 加索引:INDEX(match_id, team)
扩展统计 可加射正率、射门球员排行等

如果你能告诉我:

  1. 数据来源是数组/JSON/数据库?
  2. 是否需要实时统计还是赛后统计?
  3. 是否需要前端展示(图表)?

我可以给你更贴合的完整代码。

上一篇php项目复盘称这场胜负关键是什么?

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

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