php项目统计角球数哪边领先?

wen PHP项目 2

PHP项目统计角球数哪边领先

在足球赛事项目中,统计角球数并判断哪边领先是常见需求,下面给你一个完整的实现思路和代码示例。

php项目统计角球数哪边领先?

核心逻辑

判断角球领先只需要比较主队和客队的角球数:

  • 主队角球 > 客队角球 → 主队领先
  • 主队角球 < 客队角球 → 客队领先
  • 相等 → 平局

基础实现

<?php
class CornerStats
{
    /**
     * 获取角球领先方
     *
     * @param int $homeCorners 主队角球数
     * @param int $awayCorners 客队角球数
     * @return array
     */
    public function getLeading(int $homeCorners, int $awayCorners): array
    {
        if ($homeCorners > $awayCorners) {
            return [
                'leader' => 'home',
                'diff'   => $homeCorners - $awayCorners,
                'text'   => '主队领先',
            ];
        }
        if ($homeCorners < $awayCorners) {
            return [
                'leader' => 'away',
                'diff'   => $awayCorners - $homeCorners,
                'text'   => '客队领先',
            ];
        }
        return [
            'leader' => 'draw',
            'diff'   => 0,
            'text'   => '角球平局',
        ];
    }
}
// 使用
$corner = new CornerStats();
$result = $corner->getLeading(5, 3);
print_r($result);
// 输出:
// Array ( [leader] => home [diff] => 2 [text] => 主队领先 )

带数据库的真实场景

假设表结构:

CREATE TABLE matches (
    id INT PRIMARY KEY AUTO_INCREMENT,
    home_team VARCHAR(50),
    away_team VARCHAR(50),
    home_corners INT DEFAULT 0,
    away_corners INT DEFAULT 0,
    status TINYINT DEFAULT 0  -- 0未开始 1进行中 2结束
);

PHP 查询并判断:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=football', 'root', '123456');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$matchId = 1001;
$stmt = $pdo->prepare("SELECT home_team, away_team, home_corners, away_corners FROM matches WHERE id = ?");
$stmt->execute([$matchId]);
$match = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$match) {
    exit('比赛不存在');
}
$home = (int)$match['home_corners'];
$away = (int)$match['away_corners'];
if ($home > $away) {
    $leaderText = "{$match['home_team']} 角球领先 " . ($home - $away) . " 个";
} elseif ($home < $away) {
    $leaderText = "{$match['away_team']} 角球领先 " . ($away - $home) . " 个";
} else {
    $leaderText = "双方角球数相同({$home} - {$away})";
}
echo $leaderText;

进阶:实时变化 + 领先标记

如果要做实时角球走势(哪一方在角球上一直压制),可以记录角球产生的时间点:

<?php
class CornerTrend
{
    /**
     * @param array $corners 角球记录 [['minute'=>10,'team'=>'home'], ...]
     * @return array 走势结果
     */
    public function analyze(array $corners): array
    {
        $home = 0;
        $away = 0;
        $leadChanges = 0;
        $lastLeader = 'draw';
        $maxLead = ['team' => null, 'diff' => 0];
        foreach ($corners as $c) {
            if ($c['team'] === 'home') {
                $home++;
            } else {
                $away++;
            }
            // 当前领先方
            if ($home > $away) {
                $current = 'home';
                $diff = $home - $away;
            } elseif ($home < $away) {
                $current = 'away';
                $diff = $away - $home;
            } else {
                $current = 'draw';
                $diff = 0;
            }
            // 统计领先方变化次数
            if ($current !== 'draw' && $current !== $lastLeader && $lastLeader !== 'draw') {
                $leadChanges++;
            }
            if ($current !== 'draw') {
                $lastLeader = $current;
            }
            // 记录最大领先
            if ($diff > $maxLead['diff']) {
                $maxLead = ['team' => $current, 'diff' => $diff];
            }
        }
        // 最终领先
        if ($home > $away) {
            $final = 'home';
        } elseif ($home < $away) {
            $final = 'away';
        } else {
            $final = 'draw';
        }
        return [
            'home'        => $home,
            'away'        => $away,
            'final'       => $final,
            'lead_changes'=> $leadChanges,
            'max_lead'    => $maxLead,
        ];
    }
}
// 使用
$trend = new CornerTrend();
$res = $trend->analyze([
    ['minute' => 5,  'team' => 'home'],
    ['minute' => 18, 'team' => 'home'],
    ['minute' => 30, 'team' => 'away'],
    ['minute' => 45, 'team' => 'away'],
    ['minute' => 52, 'team' => 'home'],
]);
print_r($res);

前端展示建议

可以返回 JSON 给前端:

header('Content-Type: application/json; charset=utf-8');
echo json_encode([
    'home_corners' => $home,
    'away_corners' => $away,
    'leader'       => $leader ?? 'draw',   // home / away / draw
    'leader_text'  => $leaderText,
    'diff'         => abs($home - $away),
], JSON_UNESCAPED_UNICODE);

前端根据 leader 字段给领先方加高亮样式即可。


需求 做法
判断谁领先 直接比较两个角球数
领先幅度 abs($home - $away)
实时压制 记录每次角球 + 时间轴分析
数据来源 从 matches 表或第三方 API 获取
前端友好 返回 leader 字段 + 文本

如果你能告诉我你的数据来源(数据库表结构 / 第三方接口格式)和要展示在哪里(网页列表 / 实时大屏 / 小程序),我可以给你更贴合的代码。

上一篇php项目怎么看这场比赛的进球总数?

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!