本文目录导读:

我可以帮你设计一个PHP项目来统计两队射门次数并比较哪队更多,这里有几种实现方案:
简单的函数实现
<?php
class ShotStatistic {
private $teamAShots = [];
private $teamBShots = [];
// 记录射门
public function addShot($team, $isOnTarget = true, $minute = null) {
$shot = [
'is_on_target' => $isOnTarget,
'minute' => $minute ?? date('i:s')
];
if (strtoupper($team) === 'A') {
$this->teamAShots[] = $shot;
} else {
$this->teamBShots[] = $shot;
}
}
// 获取总射门数
public function getTotalShots($team) {
return strtoupper($team) === 'A'
? count($this->teamAShots)
: count($this->teamBShots);
}
// 比较射门次数
public function compareShots() {
$countA = count($this->teamAShots);
$countB = count($this->teamBShots);
if ($countA > $countB) {
return "A队射门更多";
} elseif ($countB > $countA) {
return "B队射门更多";
} else {
return "双方射门次数相同";
}
}
// 获取详细统计
public function getStatistics() {
return [
'teamA' => [
'total_shots' => count($this->teamAShots),
'shots_on_target' => count(array_filter($this->teamAShots, fn($s) => $s['is_on_target']))
],
'teamB' => [
'total_shots' => count($this->teamBShots),
'shots_on_target' => count(array_filter($this->teamBShots, fn($s) => $s['is_on_target']))
]
];
}
}
// 使用示例
$stats = new ShotStatistic();
// 模拟A队射门
$stats->addShot('A', true, 12);
$stats->addShot('A', false, 23);
$stats->addShot('A', true, 34);
// 模拟B队射门
$stats->addShot('B', true, 15);
$stats->addShot('B', false, 28);
echo "A队射门: " . $stats->getTotalShots('A') . "次\n";
echo "B队射门: " . $stats->getTotalShots('B') . "次\n";
echo "结果: " . $stats->compareShots() . "\n";
print_r($stats->getStatistics());
?>
数据库存储(假设使用MySQL)
<?php
class MatchShotTracker {
private $pdo;
public function __construct($host, $dbname, $user, $pass) {
try {
$this->pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$user,
$pass,
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
$this->createTables();
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
}
private function createTables() {
$sql = "
CREATE TABLE IF NOT EXISTS matches (
id INT PRIMARY KEY AUTO_INCREMENT,
match_date DATETIME,
home_team VARCHAR(100),
away_team VARCHAR(100)
);
CREATE TABLE IF NOT EXISTS shots (
id INT PRIMARY KEY AUTO_INCREMENT,
match_id INT,
team_name VARCHAR(100),
shoot_time TIME,
is_on_target BOOLEAN,
FOREIGN KEY (match_id) REFERENCES matches(id)
);
";
$this->pdo->exec($sql);
}
public function addMatch($homeTeam, $awayTeam) {
$stmt = $this->pdo->prepare("INSERT INTO matches (match_date, home_team, away_team) VALUES (NOW(), ?, ?)");
$stmt->execute([$homeTeam, $awayTeam]);
return $this->pdo->lastInsertId();
}
public function recordShot($matchId, $teamName, $isOnTarget = true) {
$stmt = $this->pdo->prepare("INSERT INTO shots (match_id, team_name, shoot_time, is_on_target) VALUES (?, ?, NOW(), ?)");
return $stmt->execute([$matchId, $teamName, $isOnTarget]);
}
public function compareShots($matchId) {
$sql = "
SELECT
team_name,
COUNT(*) as total_shots,
SUM(CASE WHEN is_on_target = 1 THEN 1 ELSE 0 END) as shots_on_target
FROM shots
WHERE match_id = ?
GROUP BY team_name
ORDER BY total_shots DESC
";
$stmt = $this->pdo->prepare($sql);
$stmt->execute([$matchId]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$output = [];
foreach ($results as $row) {
$output[] = "{$row['team_name']}: 总射门 {$row['total_shots']}次, 射正 {$row['shots_on_target']}次";
}
if (count($results) == 2) {
$output[] = $results[0]['total_shots'] > $results[1]['total_shots']
? "{$results[0]['team_name']}射门更多"
: ($results[0]['total_shots'] < $results[1]['total_shots']
? "{$results[1]['team_name']}射门更多"
: "双方射门次数相同");
}
return $output;
}
}
// 使用示例
$tracker = new MatchShotTracker('localhost', 'football_db', 'username', 'password');
// 创建比赛
$matchId = $tracker->addMatch('巴塞罗那', '皇家马德里');
// 记录射门(模拟数据)
$tracker->recordShot($matchId, '巴塞罗那', true);
$tracker->recordShot($matchId, '巴塞罗那', false);
$tracker->recordShot($matchId, '皇家马德里', true);
$tracker->recordShot($matchId, '皇家马德里', true);
$tracker->recordShot($matchId, '皇家马德里', false);
// 比较结果
$result = $tracker->compareShots($matchId);
foreach ($result as $line) {
echo $line . "\n";
}
?>
API接口形式
<?php
header('Content-Type: application/json');
class ShotAPI {
private $matchData = [];
public function receiveData($teamName, $shotType) {
$event = [
'team' => $teamName,
'type' => $shotType,
'time' => date('Y-m-d H:i:s')
];
$this->matchData[] = $event;
return $event;
}
public function getSummary() {
$teams = [];
foreach ($this->matchData as $event) {
$team = $event['team'];
if (!isset($teams[$team])) {
$teams[$team] = ['total' => 0, 'on_target' => 0];
}
$teams[$team]['total']++;
if ($event['type'] == 'on_target') {
$teams[$team]['on_target']++;
}
}
// 找出射门最多的队
if (empty($teams)) {
return json_encode(['message' => '暂无射门数据']);
}
$maxShots = max(array_column($teams, 'total'));
$leaderBoard = [];
foreach ($teams as $team => $stats) {
$leaderBoard[] = [
'team' => $team,
'total_shots' => $stats['total'],
'on_target' => $stats['on_target'],
'is_leader' => $stats['total'] == $maxShots
];
}
return json_encode([
'date' => date('Y-m-d'),
'stats' => $leaderBoard,
'most_shots' => $maxShots,
'message' => count(array_filter($leaderBoard, fn($t) => $t['is_leader'])) > 1
? '并列第一'
: '射门最多的球队'
]);
}
}
// 路由处理
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$api = new ShotAPI();
if (isset($_POST['action'])) {
switch ($_POST['action']) {
case 'record':
$result = $api->receiveData($_POST['team'], $_POST['type']);
echo json_encode(['status' => 'success', 'data' => $result]);
break;
case 'summary':
echo $api->getSummary();
break;
default:
echo json_encode(['error' => '未知操作']);
}
}
}
?>
使用建议
- 小型项目:使用方案一,简单直接
- 需要持久化存储:使用方案二,支持历史数据查询
- 前后端分离:使用方案三作为API接口
你可以根据需求选择适合的方案,需要我详细解释某个特定部分吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播