本文目录导读:

我理解您想了解如何在一个PHP项目中显示足球比赛的射门次数对比,以下是几种实现方式:
简单数组方式
<?php
// 数据准备
$matchData = [
'home_team' => '曼联',
'away_team' => '利物浦',
'home_shots' => 12,
'away_shots' => 8,
'home_shots_on_target' => 5,
'away_shots_on_target' => 3,
'home_possession' => 55,
'away_possession' => 45
];
?>
<!DOCTYPE html>
<html>
<head>射门次数对比</title>
<style>
.shot-comparison { padding: 20px; }
.team-row { display: flex; align-items: center; margin: 10px 0; }
.team-name { width: 150px; font-weight: bold; }
.shot-bar { display: flex; align-items: center; }
.bar { height: 30px; background: #4CAF50; transition: width 0.5s; }
.bar-away { background: #f44336; }
.shot-count { margin-left: 10px; font-weight: bold; }
.possession-bar { height: 20px; background: #2196F3; }
</style>
</head>
<body>
<div class="shot-comparison">
<h2>射门次数对比</h2>
<!-- 射门次数条图 -->
<div class="team-row">
<span class="team-name"><?php echo $matchData['home_team']; ?></span>
<div class="shot-bar">
<div class="bar" style="width: <?php echo $matchData['home_shots'] * 10; ?>px;"></div>
<span class="shot-count"><?php echo $matchData['home_shots']; ?></span>
</div>
</div>
<div class="team-row">
<span class="team-name"><?php echo $matchData['away_team']; ?></span>
<div class="shot-bar">
<div class="bar bar-away" style="width: <?php echo $matchData['away_shots'] * 10; ?>px;"></div>
<span class="shot-count"><?php echo $matchData['away_shots']; ?></span>
</div>
</div>
<!-- 射正次数 -->
<h3>射正次数</h3>
<p>主场:<strong><?php echo $matchData['home_shots_on_target']; ?></strong> | 客场:<strong><?php echo $matchData['away_shots_on_target']; ?></strong></p>
<!-- 控球率对比 -->
<h3>控球率</h3>
<div style="width: 100%; background: #ddd;">
<div style="width: <?php echo $matchData['home_possession']; ?>%; background: #4CAF50; padding: 5px;">
<?php echo $matchData['home_possession']; ?>%
</div>
</div>
</div>
</body>
</html>
使用Chart.js图表库
<!DOCTYPE html>
<html>
<head>射门统计对比</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<canvas id="shotChart" width="400" height="200"></canvas>
<?php
// PHP端数据
$stats = [
'labels' => ['射门', '射正', '控球率(%)'],
'home' => [12, 5, 55],
'away' => [8, 3, 45]
];
?>
<script>
const ctx = document.getElementById('shotChart').getContext('2d');
const chart = new Chart(ctx, {
type: 'bar',
data: {
labels: <?php echo json_encode($stats['labels']); ?>,
datasets: [
{
label: '主场',
data: <?php echo json_encode($stats['home']); ?>,
backgroundColor: 'rgba(54, 162, 235, 0.5)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
},
{
label: '客场',
data: <?php echo json_encode($stats['away']); ?>,
backgroundColor: 'rgba(255, 99, 132, 0.5)',
borderColor: 'rgba(255, 99, 132, 1)',
borderWidth: 1
}
]
},
options: {
scales: {
y: {
beginAtZero: true,
max: 20
}
}
}
});
</script>
</body>
</html>
从数据库获取数据
<?php
// 数据库连接
$pdo = new PDO('mysql:host=localhost;dbname=football_stats', 'username', 'password');
// 查询比赛数据
$query = "SELECT
match_id,
home_team,
away_team,
home_shots,
away_shots,
home_shots_on_target,
away_shots_on_target
FROM matches
WHERE match_id = :match_id";
$stmt = $pdo->prepare($query);
$stmt->execute(['match_id' => 1]);
$match = $stmt->fetch(PDO::FETCH_ASSOC);
// 获取球队名称
$query_teams = "SELECT team_name FROM teams WHERE team_id IN (:home_id, :away_id)";
// ... 实现具体查询
?>
<div class="shot-comparison">
<h2><?php echo $match['home_team']; ?> vs <?php echo $match['away_team']; ?></h2>
<div class="shots-container">
<div class="team home">
<h3><?php echo $match['home_team']; ?></h3>
<div class="shot-stats">
<p>射门:<span class="count"><?php echo $match['home_shots']; ?></span></p>
<p>射正:<span class="count"><?php echo $match['home_shots_on_target']; ?></span></p>
<p>得分率:<span class="percentage">
<?php echo $match['home_shots'] > 0 ?
round(($match['home_shots_on_target'] / $match['home_shots']) * 100) . '%' : '0%'; ?>
</span></p>
</div>
</div>
<div class="vs-label">VS</div>
<div class="team away">
<h3><?php echo $match['away_team']; ?></h3>
<div class="shot-stats">
<p>射门:<span class="count"><?php echo $match['away_shots']; ?></span></p>
<p>射正:<span class="count"><?php echo $match['away_shots_on_target']; ?></span></p>
<p>得分率:<span class="percentage">
<?php echo $match['away_shots'] > 0 ?
round(($match['away_shots_on_target'] / $match['away_shots']) * 100) . '%' : '0%'; ?>
</span></p>
</div>
</div>
</div>
</div>
添加更多详情和样式
<!DOCTYPE html>
<html>
<head>
<style>
.match-stats {
display: flex;
justify-content: space-between;
padding: 20px;
background: #f9f9f9;
border-radius: 8px;
}
.team-card {
flex: 1;
padding: 15px;
text-align: center;
}
.stat-item {
margin: 15px 0;
}
.stat-label {
font-weight: bold;
color: #666;
margin-bottom: 5px;
}
.stat-value {
font-size: 28px;
font-weight: bold;
color: #333;
}
.center-vs {
display: flex;
align-items: center;
font-size: 32px;
font-weight: bold;
color: #999;
padding: 0 20px;
}
.comparison-bar {
height: 30px;
background: linear-gradient(90deg, #4CAF50, #8BC34A);
border-radius: 4px;
animation: growBar 1s ease-out;
}
@keyframes growBar {
from { width: 0; }
}
</style>
</head>
<body>
<!-- 完整显示区域 -->
<div class="match-stats">
<div class="team-card home">
<h3>主场</h3>
<div class="stat-item">
<div class="stat-label">射门</div>
<div class="stat-value">12</div>
<div class="comparison-bar" style="width: 60%;"></div>
</div>
<div class="stat-item">
<div class="stat-label">射正</div>
<div class="stat-value">5</div>
</div>
<div class="stat-item">
<div class="stat-label">控球率</div>
<div class="stat-value">55%</div>
</div>
</div>
<div class="center-vs">VS</div>
<div class="team-card away">
<h3>客场</h3>
<div class="stat-item">
<div class="stat-label">射门</div>
<div class="stat-value">8</div>
<div class="comparison-bar" style="width: 40%;"></div>
</div>
<div class="stat-item">
<div class="stat-label">射正</div>
<div class="stat-value">3</div>
</div>
<div class="stat-item">
<div class="stat-label">控球率</div>
<div class="stat-value">45%</div>
</div>
</div>
</div>
</body>
</html>
完整代码示例(包含所有功能)
<?php
// 模拟数据源
$match_stats = [
'home' => [
'team_name' => '皇家马德里',
'shots' => 15,
'shots_on_target' => 7,
'possession' => 52,
'corners' => 8,
'fouls' => 12
],
'away' => [
'team_name' => '巴塞罗那',
'shots' => 18,
'shots_on_target' => 9,
'possession' => 48,
'corners' => 11,
'fouls' => 9
]
];
// 计算最大射门数用于比例
$max_shots = max($match_stats['home']['shots'], $match_stats['away']['shots']);
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">足球比赛射门统计对比</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 900px;
margin: 0 auto;
padding: 20px;
background: #f5f5f5;
}
.match-header {
text-align: center;
margin-bottom: 25px;
}
.score-container {
display: flex;
justify-content: center;
align-items: center;
margin: 20px 0;
}
.team-score {
font-size: 48px;
font-weight: bold;
margin: 0 20px;
padding: 20px;
background: white;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.score-divider {
font-size: 36px;
font-weight: bold;
color: #999;
}
.stat-card {
background: white;
border-radius: 8px;
padding: 20px;
margin: 20px 0;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.stat-row {
display: flex;
justify-content: space-between;
align-items: center;
margin: 10px 0;
}
.stat-name {
color: #666;
font-weight: 500;
min-width: 120px;
}
.stat-value {
font-weight: bold;
min-width: 30px;
text-align: center;
}
.bar-container {
flex: 1;
margin: 0 15px;
height: 30px;
background: #e0e0e0;
border-radius: 15px;
overflow: hidden;
}
.bar-fill {
height: 100%;
border-radius: 15px;
background: linear-gradient(90deg, #2196F3, #64B5F6);
transition: width 0.5s ease;
position: relative;
}
.bar-fill.away {
background: linear-gradient(90deg, #f44336, #ff7043);
}
.stat-highlight {
color: #2196F3;
}
.possession-bar {
height: 20px;
display: flex;
border-radius: 10px;
overflow: hidden;
background: #e0e0e0;
}
.possession-home {
background: #2196F3;
height: 100%;
text-align: center;
color: white;
line-height: 20px;
}
.possession-away {
background: #f44336;
height: 100%;
text-align: center;
color: white;
line-height: 20px;
}
.team-header {
display: flex;
justify-content: space-between;
margin-bottom: 15px;
}
.team-name {
font-weight: bold;
font-size: 18px;
}
.badge {
display: inline-block;
padding: 2px 8px;
background: #f0f0f0;
border-radius: 4px;
font-size: 12px;
color: #666;
}
.legend {
display: flex;
gap: 20px;
margin-top: 15px;
justify-content: center;
}
.legend-item {
display: flex;
align-items: center;
gap: 5px;
}
.legend-color {
width: 20px;
height: 10px;
border-radius: 5px;
}
</style>
</head>
<body>
<div class="match-header">
<h1>比赛统计对比</h1>
<div class="score-container">
<div class="team-score">
<span><?php echo $match_stats['home']['team_name']; ?></span>
<div><?php echo $match_stats['home']['shots_on_target']; ?></div>
</div>
<div class="score-divider">:</div>
<div class="score-divider">对手</div>
<div class="score-divider">:</div>
<div class="team-score">
<span><?php echo $match_stats['away']['team_name']; ?></span>
<div><?php echo $match_stats['away']['shots_on_target']; ?></div>
</div>
</div>
</div>
<div class="stat-card">
<h2>核心数据对比</h2>
<!-- 射门次数 -->
<div class="team-header">
<span class="team-name"><?php echo $match_stats['home']['team_name']; ?></span>
<span class="team-name"><?php echo $match_stats['away']['team_name']; ?></span>
</div>
<div class="stat-row">
<span class="stat-value"><?php echo $match_stats['home']['shots']; ?></span>
<span class="stat-name">射门次数</span>
<span class="stat-value"><?php echo $match_stats['away']['shots']; ?></span>
</div>
<div class="stat-row">
<div class="bar-container">
<div class="bar-fill" style="width: <?php echo ($match_stats['home']['shots'] / $max_shots) * 100; ?>%;"></div>
</div>
</div>
<!-- 射正次数 -->
<div class="stat-row" style="margin-top: 20px;">
<span class="stat-value"><?php echo $match_stats['home']['shots_on_target']; ?></span>
<span class="stat-name">射正次数</span>
<span class="stat-value"><?php echo $match_stats['away']['shots_on_target']; ?></span>
</div>
<div class="stat-row">
<div class="bar-container">
<div class="bar-fill" style="width: <?php echo ($match_stats['home']['shots_on_target'] / max($match_stats['home']['shots_on_target'], $match_stats['away']['shots_on_target'])) * 100; ?>%;"></div>
</div>
</div>
<!-- 角球 -->
<div class="stat-row" style="margin-top: 20px;">
<span class="stat-value"><?php echo $match_stats['home']['corners']; ?></span>
<span class="stat-name">角球</span>
<span class="stat-value"><?php echo $match_stats['away']['corners']; ?></span>
</div>
<div class="stat-row">
<div class="bar-container">
<div class="bar-fill" style="width: <?php echo ($match_stats['home']['corners'] / max($match_stats['home']['corners'], $match_stats['away']['corners'])) * 100; ?>%;"></div>
</div>
</div>
<!-- 犯规 -->
<div class="stat-row" style="margin-top: 20px;">
<span class="stat-value"><?php echo $match_stats['home']['fouls']; ?></span>
<span class="stat-name">犯规</span>
<span class="stat-value"><?php echo $match_stats['away']['fouls']; ?></span>
</div>
<!-- 控球率 -->
<div class="stat-row" style="margin-top: 20px;">
<span class="stat-value"><?php echo $match_stats['home']['possession']; ?>%</span>
<span class="stat-name">控球率</span>
<span class="stat-value"><?php echo $match_stats['away']['possession']; ?>%</span>
</div>
<div class="possession-bar">
<div class="possession-home" style="width: <?php echo $match_stats['home']['possession']; ?>%;">
<?php echo $match_stats['home']['possession']; ?>%
</div>
<div class="possession-away" style="width: <?php echo $match_stats['away']['possession']; ?>%;">
<?php echo $match_stats['away']['possession']; ?>%
</div>
</div>
</div>
<div class="legend">
<div class="legend-item">
<div class="legend-color" style="background: #2196F3;"></div>
<span><?php echo $match_stats['home']['team_name']; ?></span>
</div>
<div class="legend-item">
<div class="legend-color" style="background: #f44336;"></div>
<span><?php echo $match_stats['away']['team_name']; ?></span>
</div>
</div>
</body>
</html>
关键特性说明:
- 数据灵活性:可以从数组、数据库或API获取数据
- 响应式设计:适配不同屏幕大小
- 动画效果:条形图有过渡动画
- 可访问性:清晰的标签和颜色对比
您可以根据需要选择适合的实现方式,调整数据结构或样式,如果需要更多定制或有其他问题,请告诉我!