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) |
| 扩展统计 | 可加射正率、射门球员排行等 |
如果你能告诉我:
- 数据来源是数组/JSON/数据库?
- 是否需要实时统计还是赛后统计?
- 是否需要前端展示(图表)?
我可以给你更贴合的完整代码。