在 PHP 项目中查看双方射门转化率差异
由于你没有提供具体项目代码,我按常见足球数据项目的结构给你一套通用方案,核心公式很简单:

转化率 = 进球数 / 射门数 × 100%
SQL 层面对比(最常见做法)
假设你有 match_stats 表,字段类似:
| id | match_id | team | shots | goals |
|---|
SELECT
team,
shots,
goals,
ROUND(goals / NULLIF(shots, 0) * 100, 1) AS conversion_rate
FROM match_stats
WHERE match_id = ?
ORDER BY conversion_rate DESC;
关键点:用 NULLIF(shots,0) 防止射门为 0 时除零错误。
PHP 计算并对比
function compareConversion(array $stats): array
{
$result = [];
foreach ($stats as $row) {
$shots = (int)$row['shots'];
$goals = (int)$row['goals'];
$result[] = [
'team' => $row['team'],
'shots' => $shots,
'goals' => $goals,
'rate' => $shots > 0 ? round($goals / $shots * 100, 1) : 0,
];
}
// 按转化率排序
usort($result, fn($a, $b) => $b['rate'] <=> $a['rate']);
// 算两队差异
if (count($result) === 2) {
$diff = round($result[0]['rate'] - $result[1]['rate'], 1);
} else {
$diff = null;
}
return ['teams' => $result, 'diff' => $diff];
}
展示差异的几种方式
| 方式 | 说明 |
|---|---|
| 绝对值差 | A队 25% vs B队 12%,差 13 个百分点 |
| 相对比值 | A队是B队的 2.1 倍 |
| 差值方向 | 主队更高 / 客队更高 |
| 可视化 | 用 Chart.js 画双柱状图对比 |
更专业的分析维度
单看转化率差异不够,建议补充:
- 射正率 = 射正 / 射门(先看射正再看转化)
- 预期进球 xG 对比:实际进球 - xG = 把握机会能力
- 样本量提醒:射门只有 2 次时转化率 50% 无意义,可加判断:
if ($shots < 5) $note = '样本过小,参考价值有限';
- 分时段:上半场 / 下半场转化率差异
常见坑
- 除零错误:必须
NULLIF或 PHP 里判 0 - 点球要不要算:点球命中率高,会虚增转化率,建议拆分
- 乌龙球:不计入射门但计入进球,需剔除
- 射门被挡:有些统计算射门,有些不统计
如果你把项目的表结构或相关 PHP 代码贴出来,我可以直接帮你改写成能用的查询和展示代码。