2015-05-12 2 views
0

Я хочу знать, как я могу сортировать это в PHP в базе «leaguePoints», а затем в «побед»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

Im пытается портировать это от 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-процедуре ... Я никогда не вижу, как она может вернуться * ноль! * –

ответ

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); 
Смежные вопросы