PHP 项目统计“转身过人”次数谁多?
你说的应该是 NBA/篮球数据统计 里“转身过人”这种技术动作的统计吧?下面给你一个完整的 PHP 实现思路和代码示例。

需求分析
要统计谁转身过人次数最多,需要:
- 数据表:记录每次转身过人动作(球员 + 动作类型 + 时间)
- 统计逻辑:按球员分组,统计
动作类型 = '转身过人'的次数 - 排序:按次数降序,取第一名或排行榜
数据库设计
-- 球员表
CREATE TABLE players (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
-- 动作记录表
CREATE TABLE actions (
id INT PRIMARY KEY AUTO_INCREMENT,
player_id INT NOT NULL,
action_type VARCHAR(30) NOT NULL, -- 如 '转身过人'
match_id INT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (player_id) REFERENCES players(id)
);
插入测试数据:
INSERT INTO players (name) VALUES ('张三'), ('李四'), ('王五');
INSERT INTO actions (player_id, action_type) VALUES
(1, '转身过人'), (1, '转身过人'), (1, '转身过人'),
(2, '转身过人'), (2, '转身过人'),
(3, '转身过人'),
(1, '传球'), (2, '投篮');
PHP 统计代码
方式 1:纯 SQL 统计(推荐)
<?php
$pdo = new PDO('mysql:host=localhost;dbname=basketball;charset=utf8mb4', 'root', 'password');
$sql = "
SELECT p.id, p.name, COUNT(a.id) AS turn_count
FROM players p
JOIN actions a ON a.player_id = p.id
WHERE a.action_type = '转身过人'
GROUP BY p.id, p.name
ORDER BY turn_count DESC
";
$stmt = $pdo->query($sql);
$ranking = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 输出排行榜
echo "=== 转身过人排行榜 ===\n";
$rank = 1;
foreach ($ranking as $row) {
echo "第{$rank}名:{$row['name']} —— {$row['turn_count']} 次\n";
$rank++;
}
// 谁最多?
if (!empty($ranking)) {
echo "\n🏆 转身过人王:{$ranking[0]['name']}({$ranking[0]['turn_count']} 次)\n";
}
输出示例:
=== 转身过人排行榜 ===
第1名:张三 —— 3 次
第2名:李四 —— 2 次
第3名:王五 —— 1 次
🏆 转身过人王:张三(3 次)
方式 2:PHP 数组统计(适合数据来自 API / 缓存)
<?php
// 假设从某处拿到原始记录
$records = [
['player' => '张三', 'action' => '转身过人'],
['player' => '张三', 'action' => '转身过人'],
['player' => '李四', 'action' => '转身过人'],
['player' => '张三', 'action' => '转身过人'],
['player' => '李四', 'action' => '转身过人'],
['player' => '王五', 'action' => '转身过人'],
['player' => '张三', 'action' => '传球'],
];
$counter = [];
foreach ($records as $r) {
if ($r['action'] === '转身过人') {
$counter[$r['player']] = ($counter[$r['player']] ?? 0) + 1;
}
}
arsort($counter); // 按次数降序
print_r($counter);
// 输出:Array ( [张三] => 3 [李四] => 2 [王五] => 1 )
扩展建议
| 需求 | 实现方式 |
|---|---|
| 按比赛统计 | WHERE match_id = ? |
| 按时间段 | WHERE created_at BETWEEN ? AND ? |
| 成功率(转身过人后是否得分) | 增加 result 字段,统计 result='成功' |
| 缓存排行 | 用 Redis ZINCRBY ranking:turn 1 张三 |
| 分页排行榜 | SQL 加 LIMIT ?, ? |
如果用于 Web 展示(简易版)
// api.php
header('Content-Type: application/json; charset=utf-8');
$stmt = $pdo->query($sql);
echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC), JSON_UNESCAPED_UNICODE);
前端 fetch 后渲染表格即可。
请问你的具体场景是:
- 数据来源是 MySQL 还是文件/API?
- 要不要区分比赛、赛季?
- 要不要显示“转身过人成功率”?
告诉我,我可以给你更贴合的完整代码 👌