【问题标题】:Sorting collection 2 times对集合进行 2 次排序
【发布时间】:2017-06-09 10:27:30
【问题描述】:

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

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

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

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

感谢您的帮助!

编辑已解决:

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

【问题讨论】:

标签: php laravel laravel-collection


【解决方案1】:

只需在点值之后连接胜利

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

这会将胜利添加到排序字符串中,并确保当两个产品的得分相同时,最高胜利保持在首位。

【讨论】:

  • 今晚我会试试这个并给你反馈谢谢!!
  • 不要忘记在两者之间添加一些非数字的东西,否则11 3 将与1 13 相同(都是 113 连接的)。
  • 从未想过!哈哈谢谢各位。没错,积分 + 胜利 = 每支球队的唯一数字。太好了:)
  • 我只是想想……如果两支球队的胜利和积分数相同怎么办?我将不得不检查另一列,例如“目标”,但如果较低的团队有更多“目标”,它将不起作用:/
  • 由于您现在将其转换为字符串,并在它们之间进行字符串比较,如果字符串比较与数字不同,这将不起作用。 “1_100”将排在“1_2”之前
【解决方案2】:

创建一个多维数组,点数为第一个键,胜利为第二个键,php会自动按key排序。

<?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>";
?>

【讨论】:

  • 我从没想过会那样做!!太棒了 :) 我稍后会试一试并给你反馈。
  • 刚刚尝试过,它就像一个魅力! :) 谢谢!我只是没有使用echo"&lt;ol&gt;" 部分,因为我只是想在控制器中建立排名,然后在我的视图中使用它。但是PHP的逻辑是完美的!
猜你喜欢
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 2011-04-04
  • 2013-02-25
  • 2017-04-26
相关资源
最近更新 更多