2015-05-12 63 views
0

我想知道我可以在“leaguePoints”基地排序这在PHP中,然后在“PHP排序多阵列由值

<?php 
      foreach ($league as $leaguesList) 
      { 
       if ($leaguesList->queue == "RANKED_SOLO_5x5") 
       { 
        foreach ($leaguesList as $list) 
        { 
         if ($list->division == $leagueSummoner->division){ 
          $array[] = $list; 
         } 
        } 
       } 
      } 

    var_dump($array); 

结果:http://pastebin.com/QkKU7W0k

我试图从Java移植它,所以我这样做:

public void setRankList(List<LeagueSummonerLeagueStats> _rankList) { 

    rankList = _rankList; 
    Collections.sort(rankList, new Comparator() { 

     public int compare(Object match1Obj, Object match2Obj) { 

      LeagueSummonerLeagueStats league1 = (LeagueSummonerLeagueStats) match1Obj; 

      LeagueSummonerLeagueStats league2 = (LeagueSummonerLeagueStats) match2Obj; 

      int i = Integer.compare(league2.getLeaguePoints(), league1.getLeaguePoints()); 

      if (i != 0) 
       return i; 

      i = Integer.compare(league2.getWins(), league1.getWins()); 

      if (i != 0) 
       return i; 

      return -1; 
     } 
    }); 
    } 

非常感谢您的时间,我非常感谢您的帮助。

+1

您需要在PHP中做什么,正是您在Java中所看到的:您必须定义一个排序比较函数。 (请参阅PHP的文档。)此函数将返回小于,等于或大于零的值,具体取决于排序引擎提供给它的两个变量之间的顺序。 “我不是一个代码编写服务”,但实施应该很清楚。 –

+0

P.S.我想知道在这个Java例程中是否会有一个* bug *,我从来没有看到它是如何返回的*零!* –

回答

0

我不喜欢通常提供解决方案,但只需将其移植到另一种语言即可。

基本上,你想写一个bubblesort回调函数,它将首先比较两个记录胜利属性,然后如果他们是平等的,回落到联盟点属性。类似于

$data = [ 
    [ 
     'wins' => 10, 
     'leaguePoints' => 10, 
    ], 
    [ 
     'wins' => 10, 
     'leaguePoints' => 20, 
    ], 
    [ 
     'wins' => 20, 
     'leaguePoints' => 10, 
    ],  
    [ 
     'wins' => 10, 
     'leaguePoints' => 10, 
    ], 
]; 

usort($data, function($a, $b) 
{ 
    if ($a['wins'] === $b['wins']) { 
     if ($a['leaguePoints'] === $b['leaguePoints']) { 
      return 0; 
     } 

     return ($a['leaguePoints'] > $b['leaguePoints']) ? -1 : 1; 
    } 

    return ($a['wins'] > $b['wins']) ? -1 : 1; 
}); 

print_r($data); 
0

您需要使用usort()像这样:

function myCompare($a, $b) { 
    // comparison code here 
} 

usort($mydata, 'myCompare'); 

或匿名函数:

usort($mydata, function($a, $b){ /* ... */ }); 

,或者你可以接受两个参数,返回一个负数任何Callable饲料,零或正数。

0

不确定我的索引是否正确。

foreach($league as $leaguesList){ 

    foreach ($leaguesList as $key => $list){ 

    $leaguePoints = [$key] ["info"]["leaguePoints"]; 
    $wins = [$key] ["info"]["info"]["wins"]; 
    $sort = $leaguePoints *= 100 + $wins; 
    $sorted[$sort] = $list; 

    } 
} 
ksort($sorted);