Php 分类收集2次

Php 分类收集2次,php,laravel,laravel-collection,Php,Laravel,Laravel Collection,所以我想对一个集合进行排序(这对我来说没问题),但如果在这个排序结果中,2个值相等,我想比较另外两个值,以确定首先发生什么 我有30支球队,他们都有分数,但有些球队的分数是一样的。如果是这样的话,我想检查一下每支球队的胜利情况,把获胜最多的球队放在获胜较少的球队前面 排名=$team\u stats->sortByDesc(功能($product){ 退货($product['nhl\U SEASURE\U w']*2)+$product['nhl\U SEASURE\U otl'] }); 是

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

我有30支球队,他们都有分数,但有些球队的分数是一样的。如果是这样的话,我想检查一下每支球队的胜利情况,把获胜最多的球队放在获胜较少的球队前面

排名=$team\u stats->sortByDesc(功能($product){
退货($product['nhl\U SEASURE\U w']*2)+$product['nhl\U SEASURE\U otl']
});

是啊!这是球队得分的排序,现在我想按胜利排序平局

谢谢你的帮助

编辑已解决的问题:

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


只需在分值后连接胜利

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

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

只需将胜利连接到分值之后即可

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

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

创建多维数组,点是第一个键,胜利是第二个键,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>";
?>

创建一个多维数组,点是第一个键,胜利是第二个键,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>";
?>



可能的副本:/今天晚些时候我会仔细查看,谢谢!!您不能在数据库级别使用两个按顺序排列的条件来执行此操作吗?我使用了@sjayswal answer,它工作得很好:)可能的重复:/我今天稍后会仔细查看,谢谢!!您不能在数据库级别使用两个按顺序排列的条件来执行此操作吗?我使用了@sjayswal answer,它工作得非常好:)今晚我将尝试此操作并给您反馈谢谢!!别忘了在两者之间添加一些非数字的内容,否则
11 3
将与
1 13
相同(两者都是113串联的)。从未想过!!哈哈,谢谢你们。没错,积分+胜利=每个团队的唯一数字。太好了:)我只是想了想。。。如果两个队的胜利和分数相同怎么办?我必须检查另一列,如Goals,但如果较低级别的团队有更多的目标,则它将不起作用:/因为您现在正在将其转换为字符串,并在它们之间进行字符串比较,如果字符串的比较与数字不同,则这不起作用。“1_100”将在“1_2”之前排序。我今晚将尝试此功能,并给您反馈谢谢!!别忘了在两者之间添加一些非数字的内容,否则
11 3
将与
1 13
相同(两者都是113串联的)。从未想过!!哈哈,谢谢你们。没错,积分+胜利=每个团队的唯一数字。太好了:)我只是想了想。。。如果两个队的胜利和分数相同怎么办?我必须检查另一列,如Goals,但如果较低级别的团队有更多的目标,则它将不起作用:/因为您现在正在将其转换为字符串,并在它们之间进行字符串比较,如果字符串的比较与数字不同,则这不起作用。“1_100”会在“1_2”之前排序我从没想过要这样做!!太棒了:)我稍后会尝试一下并给你反馈。只要尝试一下,它就会像一个符咒一样工作!!:)谢谢我只是没有使用
echo”“
部分原因,我只是想在控制器中建立排名,然后在我的视图中使用它。但是PHP逻辑是完美的!我从没想过要那样做!!太棒了:)我稍后会尝试一下并给你反馈。只要尝试一下,它就会像一个符咒一样工作!!:)谢谢我只是没有使用
echo”“
部分原因,我只是想在控制器中建立排名,然后在我的视图中使用它。但是PHP逻辑是完美的!