You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP:按积分、胜场等多字段对联赛球队数组排序

联赛积分表多维度排序实现方法

需要对球队数组按积分(points)降序→胜场(wins)降序→平局(draws)降序→负场(loss)升序的优先级排序(负场越少排名越高),以下是两种可行的实现方案:

原始球队数组

$teams = [
    '35006454-f94e-4d2e-90a4-3e09cbae7885' => [
        'teamid'    => '35006454-f94e-4d2e-90a4-3e09cbae7885',
        'teamtitle' => 'Team0',
        'avatar'    => 'Link.jpg',
        'points'    => 8,
        'wins'      => 4,
        'loss'      => 0,
        'draws'     => 0,
        'matches'   => 4
    ],
    '807bafad-fb44-4062-bc87-d6c7566c943d' => [
        'teamid'    => '807bafad-fb44-4062-bc87-d6c7566c943d',
        'teamtitle' => 'Team1',
        'avatar'    => 'Link.jpg',
        'points'    => 6,
        'wins'      => 3,
        'loss'      => 1,
        'draws'     => 0,
        'matches'   => 4
    ]
];

方法一:使用uasort()自定义排序逻辑(保留原键名)

通过自定义比较函数,按优先级依次对比字段值,返回排序差值:

uasort($teams, function($a, $b) {
    // 1. 优先按积分降序
    if ($a['points'] !== $b['points']) {
        return $b['points'] - $a['points'];
    }
    // 2. 积分相同按胜场降序
    if ($a['wins'] !== $b['wins']) {
        return $b['wins'] - $a['wins'];
    }
    // 3. 胜场相同按平局降序
    if ($a['draws'] !== $b['draws']) {
        return $b['draws'] - $a['draws'];
    }
    // 4. 平局相同按负场升序(负场少的排前)
    return $a['loss'] - $b['loss'];
});

如果不需要保留原UUID键名,改用usort()即可,用法完全一致。


方法二:使用array_multisort()实现多字段排序

先提取各排序字段的独立数组,再按优先级传入函数完成同步排序:

// 提取各排序字段的对应数组
$points = [];
$wins = [];
$draws = [];
$loss = [];

foreach ($teams as $team) {
    $points[] = $team['points'];
    $wins[] = $team['wins'];
    $draws[] = $team['draws'];
    $loss[] = $team['loss'];
}

// 执行多维度排序:积分降序→胜场降序→平局降序→负场升序
array_multisort(
    $points, SORT_DESC,
    $wins, SORT_DESC,
    $draws, SORT_DESC,
    $loss, SORT_ASC,
    $teams // 要排序的原始球队数组
);

此方法默认保留原数组的关联键名,排序逻辑清晰,适合字段较多的场景。

内容的提问来源于stack exchange,提问作者Alez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:50:26