Php多排序功能

时间:2016-01-07 18:44:53

标签: php sorting

我试图不仅通过得分,而且通过每周的胜利来排名积分榜。在我的联赛中,总得分(选秀比率)是顶级赛狗,但胜利是决胜局。我有2个人在2,其中2人每人1胜,另有2人。排名页面显示无序。与第3名的所有人一样,2胜的人应该排在最前面。 (见链接)

http://imgur.com/vH2xzRN

我在standings.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');

但这不起作用,我知道这个功能不适用于此。

2 个答案:

答案 0 :(得分:2)

这就是获得我想要的结果所需的全部内容:

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

答案 1 :(得分:1)

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

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

您没有真正指定排序的格式,因此我认为只有arrayplayerwinsscore作为属性的对象。如果我误解或者情况不是这样,请告诉我。