Php多排序功能


Php multi sort function

我试图不仅根据分数,还根据每周获胜情况对积分榜进行排序。在我的联盟中,总得分(选择率)是最高的,但胜利是决胜局。我有三个人排在第二位,其中两人各赢一场,另一人0胜。积分榜页面显示它们出现故障。第三名的每个人都是一样的,赢得2场胜利的人应该是第一名。(见链接)

https://i.stack.imgur.com/taOkK.jpg

我看到它在我的支架上的排序位置。php页面:

$playerTotals = sort2d($playerTotals, 'score', 'desc');

它从我的functions.php页面调用一个排序函数:

//the following function was found at http://www.codingforums.com/showthread.php?t=71904
function sort2d ($array, $index, $order='asc', $natsort=FALSE, $case_sensitive=FALSE) {
if (is_array($array) && count($array) > 0) {
  foreach(array_keys($array) as $key) {
     $temp[$key]=$array[$key][$index];
  }
  if(!$natsort) {
     ($order=='asc')? asort($temp) : arsort($temp);
  } else {
     ($case_sensitive)? natsort($temp) : natcasesort($temp);
     if($order!='asc') {
        $temp=array_reverse($temp,TRUE);
     }
  }
  foreach(array_keys($temp) as $key) {
     (is_numeric($key))? $sorted[]=$array[$key] : $sorted[$key]=$array[$key];
  }
  return $sorted;
}
return $array;
}

所以,我需要先按得分排序,然后再赢。我试过:

$playerTotals = sort2d($playerTotals, 'score', 'desc', 'wins', 'desc');

但这不起作用,我知道这个功能并不是为了这个。

这就是我得到想要的结果所需要的:

array_multisort($score, SORT_DESC, $wins, SORT_DESC, $playerTotals);

如果我误解了你的问题,很抱歉,但我认为你想按分数和胜利排序,而胜利的优先级较低?那么,如果两名球员得分相同,按胜场排序?如果是这样的话,你可以这样做,它可以是任何语言中的一个通用概念:

usort($arrayOfPlayers, function($a, $b) {
    if ($a->score == $b->score) { //Check if score is equal
        if ($a->wins == $b->wins) { //If score is equal, sort by wins
            return 0;
        }
        return ($a->wins > $b->wins) ? 1 : -1;
    }
    return ($a->score > $b->score) ? 1 : -1; //Sort by score since not equal
}

http://php.net/manual/en/function.usort.php

您并没有真正指定排序的格式,所以我认为它只是以winsscore为属性的player对象的array。如果我误解了或者事实并非如此,请告诉我。