PHP项目显示"横传转移球次数"的实现
您的问题比较简短,我需要先确认一下具体场景,不过我可以给您一个通用的实现方案。

理解需求
"横传转移球"通常出现在足球数据分析场景,指的是一次传球横向跨越球场(从左路到右路,或反之),也可能是篮球中的"横传球"。
常见统计口径:
- 传球起点和终点的 X 坐标变化大(横向移动距离超过阈值)
- 或者起终点分别在球场左右两侧区域
数据库设计示例
CREATE TABLE passes (
id INT AUTO_INCREMENT PRIMARY KEY,
match_id INT,
player_id INT,
start_x DECIMAL(5,2), -- 起点横坐标 (0-100)
start_y DECIMAL(5,2), -- 起点纵坐标
end_x DECIMAL(5,2), -- 终点横坐标
end_y DECIMAL(5,2), -- 终点纵坐标
pass_time DATETIME,
is_success TINYINT DEFAULT 1
);
核心统计逻辑(PHP)
<?php
// 横传转移球:横向距离 >= 30(即跨越约1/3球场宽度)
// 且纵向位移较小(说明是横向转移而非斜传)
function countCrossTransfers(PDO $pdo, int $matchId, int $minHorizontal = 30): int
{
$sql = "SELECT COUNT(*) FROM passes
WHERE match_id = :match_id
AND is_success = 1
AND ABS(end_x - start_x) >= :min_h
AND ABS(end_y - start_y) < ABS(end_x - start_x)";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':match_id' => $matchId,
':min_h' => $minHorizontal,
]);
return (int)$stmt->fetchColumn();
}
// 使用
$pdo = new PDO('mysql:host=localhost;dbname=football;charset=utf8mb4', 'user', 'pass');
echo "横传转移球次数: " . countCrossTransfers($pdo, 1001);
或者在 PHP 中处理数组数据
如果数据来自 API 或 JSON:
$passes = json_decode(file_get_contents('passes.json'), true);
$count = 0;
foreach ($passes as $p) {
$dx = abs($p['end_x'] - $p['start_x']);
$dy = abs($p['end_y'] - $p['start_y']);
// 横向位移 ≥ 30 且横向大于纵向
if ($dx >= 30 && $dx > $dy && $p['is_success']) {
$count++;
}
}
echo "横传转移球次数: {$count}";
显示在页面上
<div class="stat">
<span class="label">横传转移球</span>
<span class="value"><?= $count ?> 次</span>
</div>
需要您补充的信息
为了给您更精准的代码,请告诉我:
- 这是足球、篮球还是其他项目? 判定标准不同
- 数据从哪里来? 数据库 / API / Excel / JSON / 手工输入?
- "横传转移"的判定规则是什么? 是否有明确定义(阈值、区域)?
- 是要写一个完整项目,还是在现有项目里加一个统计模块?
- 用的框架是什么? 原生 PHP / ThinkPHP / Laravel?
提供这些信息后,我可以给出完整可运行的代码。