0

所以我想对一个集合进行排序(这对我来说没问题),但如果在这个排序结果中 2 个值相等,我想比较其他两个值来确定先发生什么。

例如:我有 30 支球队,他们都有积分,但有些球队可以有相同数量的积分。如果是这样,我想检查每支球队的胜利,并将胜利最多的球队放在胜利较少的球队前面。

rankings = $team_stats->sortByDesc(function($product) { return ($product['nhl_season_w'] * 2) + $product['nhl_season_otl'] });

是的!这对球队的积分进行了排序,现在我想按胜利对平等进行排序。

谢谢您的帮助!

编辑解决:

我使用 $key + 1 来确保我的团队 ID 保持不变,这样更容易从团队排名中获取任何其他信息:)

在此处输入图像描述

4

2 回答 2

2

只需在点值之后连接胜利

$rankings = $team_stats->sortByDesc(function($product) {
     return (($product['nhl_season_w'] * 2) + $product['nhl_season_otl']) . '_' . $procuct['victories'];
});

这会将胜利添加到排序字符串中,并确保当两个产品具有相同分数时,最高胜利保持在顶部。

于 2017-06-07T14:24:29.637 回答
1

创建一个多维数组,点是第一个键,胜利是第二个键,php 会自动按键对它们进行排序。

<?php 
//each array with (Teams, Points, Wins)
$rank[] = array('Team' => "A", 'Points' => 24, 'Wins' => 11);
$rank[] = array('Team' => "B", 'Points' => 26, 'Wins' => 11);
$rank[] = array('Team' => "C", 'Points' => 25, 'Wins' => 10);
$rank[] = array('Team' => "D", 'Points' => 24, 'Wins' => 12);
$rank[] = array('Team' => "E", 'Points' => 25, 'Wins' => 11);
$rank[] = array('Team' => "F", 'Points' => 27, 'Wins' => 13);

foreach ($rank as $key => $row) {
    $points[$key]  = $row['Points'];
    $wins[$key] = $row['Wins'];
}

array_multisort($points, SORT_DESC, $wins, SORT_DESC, $rank);

echo "<ol>";
for ($line = 0; $line < 6; $line++){
    echo "<li><b> Rank</b>";
    foreach($rank[$line] as $key => $value){
        echo "|".$key."-".$value."|";
    }
    echo "</li>";
}    
echo "</ol>";
?>
于 2017-06-07T14:26:41.633 回答