本文目录导读:

我来帮您创建一个统计脚后跟传球成功次数的PHP解决方案,这需要根据您的具体数据格式来实现,我提供几种常见的实现方式:
方案1:基于数组统计数据
<?php
class HeelPassStats {
private $passes = [];
/**
* 添加传球记录
* @param array $pass 传球数据
*/
public function addPass(array $pass) {
$this->passes[] = [
'player_id' => $pass['player_id'] ?? null,
'player_name' => $pass['player_name'] ?? '',
'is_heel' => $pass['is_heel'] ?? false,
'is_success' => $pass['is_success'] ?? false,
'match_id' => $pass['match_id'] ?? null,
'timestamp' => time()
];
}
/**
* 统计所有脚后跟传球成功次数
*/
public function countSuccessfulHeelPasses() {
$count = 0;
foreach ($this->passes as $pass) {
if ($pass['is_heel'] && $pass['is_success']) {
$count++;
}
}
return $count;
}
/**
* 统计每个球员的脚后跟传球成功次数
*/
public function countByPlayer() {
$playerStats = [];
foreach ($this->passes as $pass) {
if ($pass['is_heel'] && $pass['is_success']) {
$playerId = $pass['player_id'];
if (!isset($playerStats[$playerId])) {
$playerStats[$playerId] = [
'name' => $pass['player_name'],
'success_count' => 0
];
}
$playerStats[$playerId]['success_count']++;
}
}
return $playerStats;
}
/**
* 按比赛统计
*/
public function countByMatch() {
$matchStats = [];
foreach ($this->passes as $pass) {
if ($pass['is_heel'] && $pass['is_success']) {
$matchId = $pass['match_id'];
if (!isset($matchStats[$matchId])) {
$matchStats[$matchId] = 0;
}
$matchStats[$matchId]++;
}
}
return $matchStats;
}
}
// 使用示例
$stats = new HeelPassStats();
// 添加测试数据
$stats->addPass([
'player_id' => 1,
'player_name' => '梅西',
'is_heel' => true,
'is_success' => true,
'match_id' => 101
]);
$stats->addPass([
'player_id' => 1,
'player_name' => '梅西',
'is_heel' => true,
'is_success' => false, // 失败
'match_id' => 101
]);
$stats->addPass([
'player_id' => 2,
'player_name' => 'C罗',
'is_heel' => true,
'is_success' => true,
'match_id' => 102
]);
// 输出统计结果
echo "脚后跟传球成功总次数: " . $stats->countSuccessfulHeelPasses() . "\n";
print_r($stats->countByPlayer());
print_r($stats->countByMatch());
?>
方案2:从数据库查询
<?php
class DatabaseHeelPassStats {
private $pdo;
public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}
/**
* 统计所有脚后跟传球成功次数
*/
public function getTotalSuccessfulHeelPasses() {
$sql = "SELECT COUNT(*) as total
FROM passes
WHERE pass_type = 'heel'
AND is_success = 1";
$stmt = $this->pdo->query($sql);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result['total'];
}
/**
* 统计每个球员的脚后跟传球成功次数
*/
public function getPlayerHeelPassStats() {
$sql = "SELECT
p.player_id,
p.player_name,
COUNT(*) as success_count
FROM passes p
WHERE p.pass_type = 'heel'
AND p.is_success = 1
GROUP BY p.player_id, p.player_name
ORDER BY success_count DESC";
$stmt = $this->pdo->query($sql);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
/**
* 按比赛统计脚后跟传球成功次数
*/
public function getMatchHeelPassStats($matchId = null) {
$sql = "SELECT
match_id,
COUNT(*) as success_count
FROM passes
WHERE pass_type = 'heel'
AND is_success = 1";
if ($matchId !== null) {
$sql .= " AND match_id = :match_id";
$stmt = $this->pdo->prepare($sql);
$stmt->execute(['match_id' => $matchId]);
} else {
$sql .= " GROUP BY match_id";
$stmt = $this->pdo->query($sql);
}
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
/**
* 统计指定日期范围内的脚后跟传球成功次数
*/
public function getDateRangeHeelPassStats($startDate, $endDate) {
$sql = "SELECT
DATE(p.created_at) as pass_date,
COUNT(*) as success_count
FROM passes p
WHERE p.pass_type = 'heel'
AND p.is_success = 1
AND DATE(p.created_at) BETWEEN :start_date AND :end_date
GROUP BY DATE(p.created_at)
ORDER BY pass_date";
$stmt = $this->pdo->prepare($sql);
$stmt->execute([
'start_date' => $startDate,
'end_date' => $endDate
]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
// 数据库连接示例
$dsn = 'mysql:host=localhost;dbname=football_stats;charset=utf8mb4';
$pdo = new PDO($dsn, 'username', 'password');
$stats = new DatabaseHeelPassStats($pdo);
// 使用示例
echo "总成功次数: " . $stats->getTotalSuccessfulHeelPasses() . "\n";
print_r($stats->getPlayerHeelPassStats());
print_r($stats->getMatchHeelPassStats());
?>
方案3:简单函数统计
<?php
/**
* 简单统计脚后跟传球成功的次数
* @param array $passes 传球数据数组
* @return int
*/
function countSuccessfulHeelPasses(array $passes) {
$count = 0;
foreach ($passes as $pass) {
if (($pass['type'] ?? '') === 'heel' && ($pass['success'] ?? false)) {
$count++;
}
}
return $count;
}
/**
* 从CSV文件统计
*/
function countFromCSV($filePath) {
if (!file_exists($filePath)) {
return 0;
}
$count = 0;
$handle = fopen($filePath, 'r');
if ($handle !== false) {
// 假设CSV格式: player_id,player_name,pass_type,is_success
fgetcsv($handle); // 跳过表头
while (($data = fgetcsv($handle)) !== false) {
if ($data[2] === 'heel' && $data[3] == 1) {
$count++;
}
}
fclose($handle);
}
return $count;
}
// 使用示例
$passes = [
['type' => 'heel', 'success' => true],
['type' => 'normal', 'success' => true],
['type' => 'heel', 'success' => false],
['type' => 'heel', 'success' => true],
];
echo "脚后跟传球成功次数: " . countSuccessfulHeelPasses($passes);
?>
数据库表结构建议
CREATE TABLE passes (
id INT AUTO_INCREMENT PRIMARY KEY,
match_id INT NOT NULL,
player_id INT NOT NULL,
pass_type ENUM('normal', 'heel', 'other') DEFAULT 'normal',
is_success BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_match_player (match_id, player_id),
INDEX idx_pass_type (pass_type)
);
您可以根据实际需求选择合适的方案,如果您能提供更详细的数据结构或需求,我可以进一步优化代码。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播