本文目录导读:

在PHP项目中查看两队(或两个对象)的拦截和抢断数据,通常取决于你的数据存储方式(数据库、API、数组等)以及业务场景(体育赛事、游戏等),下面我按最常见的场景给你完整方案。
先明确数据模型
通常这类数据会存在一张统计表里,
CREATE TABLE match_stats (
id INT PRIMARY KEY AUTO_INCREMENT,
match_id INT, -- 比赛ID
team_id INT, -- 队伍ID(A队/B队)
interceptions INT, -- 拦截次数
steals INT, -- 抢断次数
created_at DATETIME
);
从数据库查询两队数据
基础查询(原生 PDO)
<?php
$matchId = 1001;
$pdo = new PDO('mysql:host=localhost;dbname=sports;charset=utf8mb4', 'root', '');
$stmt = $pdo->prepare("
SELECT t.team_name, s.interceptions, s.steals
FROM match_stats s
JOIN teams t ON t.id = s.team_id
WHERE s.match_id = :match_id
");
$stmt->execute([':match_id' => $matchId]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($rows);
输出示例:
[
['team_name' => 'A队', 'interceptions' => 12, 'steals' => 8],
['team_name' => 'B队', 'interceptions' => 9, 'steals' => 5],
]
用 Laravel Eloquent
$stats = MatchStat::with('team')
->where('match_id', $matchId)
->get(['team_id', 'interceptions', 'steals']);
foreach ($stats as $s) {
echo $s->team->name . ":拦截 {$s->interceptions},抢断 {$s->steals}\n";
}
一次性对比两队(方便展示)
$stats = MatchStat::where('match_id', $matchId)
->pluck('interceptions', 'team_id'); // [teamId => 拦截数]
把数据整理成"两队对比"结构
前端或接口通常需要这样的格式:
$result = [
'A' => ['interceptions' => 0, 'steals' => 0],
'B' => ['interceptions' => 0, 'steals' => 0],
];
foreach ($rows as $row) {
$key = $row['team_id'] == $teamAId ? 'A' : 'B';
$result[$key]['interceptions'] = $row['interceptions'];
$result[$key]['steals'] = $row['steals'];
}
输出 JSON:
{
"A": { "interceptions": 12, "steals": 8 },
"B": { "interceptions": 9, "steals": 5 }
}
常见易踩的坑
| 问题 | 说明 |
|---|---|
| 数据为空 | 用 ?? 0 或 COALESCE 兜底 |
| 类型是字符串 | 记得 (int) 强转 |
| 排序错乱 | 明确 ORDER BY team_id |
| 队伍名混用 | 用 team_id 关联而非名字 |
兜底示例:
$interceptions = (int)($row['interceptions'] ?? 0);
如果你的数据是"事件流"而不是汇总表
比如每条记录是一次动作:
CREATE TABLE match_events (
id INT,
match_id INT,
team_id INT,
event_type ENUM('interception','steal','pass','shot')
);
那就用聚合查询:
SELECT team_id,
SUM(event_type='interception') AS interceptions,
SUM(event_type='steal') AS steals
FROM match_events
WHERE match_id = ?
GROUP BY team_id;
告诉我你的具体情况,我可以给更贴合的代码:
- 数据存在数据库还是数组 / 接口?
- 用的是原生 PHP、Laravel、ThinkPHP 还是其他框架?
- 是比赛统计、游戏战绩,还是其他场景?
- 需要直接展示页面,还是输出 JSON 接口?