2015-07-10 1 views
0

У меня есть этот простой футбольные команды массив:Php массив usort функции

Array 
(
    [0] => Array 
     (
      [name] => MANCHESTER 
      [pts] => 8 
      [gd] => 5 
     ) 

    [1] => Array 
     (
      [name] => BOURNEMOUTH 
      [pts] => 3 
      [gd] => 2 
     ) 

    [2] => Array 
     (
      [name] => STOKE CITY 
      [pts] => 2 
      [gd] => 4 
     ) 

    [3] => Array 
     (
      [name] => LIVERPOOL 
      [pts] => 3 
      [gd] => 5 
     ) 
    [4] => Array 
     (
      [name] => ARSENAL 
      [pts] => 9 
      [gd] => 1 
     ) 

) 
  • имя - это команды называют
  • очков - общее количество баллов каждой команды
  • Г.Д.-разница Цель каждой команды

Я хочу, чтобы отсортировать команды сначала pts, а затем, если мы имеем тот же pts, сортировать по gds.

сортировки только очков мы имеем:

function sortByOrder($a, $b){ 
    return $a['pts'] - $b['pts']; 
} 
usort($this_is_my_array, 'sortByOrder'); 

Результат массив:

ARSENAL (pts:9, gd:1) 
MANCHESTER (pts:8, gd:5) 
BOURNEMOUTH (pts:3, gd:2) 
LIVERPOOL (pts:3, gd:5) 
STOKE CITY (pts:2, gd:4) 

Но BOURNEMOUTH & LIVERPOOL мы имеем pts повторять, так что мы должны иметь этот результат:

ARSENAL (pts:9, gd:1) 
MANCHESTER (pts:8, gd:5) 
LIVERPOOL (pts:3, gd:5) 
BOURNEMOUTH (pts:3, gd:2) 
STOKE CITY (pts:2, gd:4) 
+0

пожалуйста, проверьте мой ответ .. –

+0

@HaykMakyan _ (FYI: Вы можете принять или upvote один из них ответа, который действительно помогает вам.) _ –

ответ

3
uasort($your_array, function($a,$b){ 
    $c = $b['pts'] - $a['pts']; 
    $c .= $b['gd'] - $a['gd']; 
    return $c; 
}); 
print_r($your_array); 

Fiddle

+1

Работает отлично! Спасибо! –

+0

Рад, что это помогло вам –

+0

@Uchiha Я думаю, что с двумя цифрами может быть проблемой, что-то как pts 11 gd 2 и pts 1 gd 12. Я ошибаюсь, надеюсь – splash58

0

Попробуйте это:

$array=array(
    array("name"=>"MANCHESTER","pts"=>"8","gd"=>"5"), 
    array("name"=>"BOURNEMOUTH","pts"=>"3","gd"=>"2"), 
    array("name"=>"STOKE CITY","pts"=>"2","gd"=>"4"), 
    array("name"=>"LIVERPOOL","pts"=>"3","gd"=>"5"), 
    array("name"=>"ARSENAL","pts"=>"9","gd"=>"1") 
    ); 
    foreach ($array as $key => $row) { 
    $searchcountvalue[$key] = $row['name']; 
    $pastsearchcountvalue[$key] = $row['pts']; 
    $abstract_count[$key] = $row['gd']; 
}array_multisort($pastsearchcountvalue, SORT_DESC, $abstract_count, SORT_DESC, $array); 
echo "<pre>";print_r($array); 
0

Ваш массив в этом формате, попробуйте проверить это решение.

$s[] = array 
     (
      'name' => 'MANCHESTER', 
      'pts' => 8, 
      'gd' => 5 
     ); 

$s[] = array 
     (
      'name' => 'BOURNEMOUTH', 
      'pts' => 3, 
      'gd' => 2 
     );  
$s[] = array 
     (
      'name' => 'STOKE CITY', 
      'pts' => 2, 
      'gd' => 4 
     ); 

    $s[] = array 
     (
      'name' => 'testing', 
      'pts' => 2, 
      'gd' => 6 
     ); 

$s[] = array 
     (
      'name'=> 'LIVERPOOL', 
      'pts' => 3, 
      'gd' => 5 
     );  

$s[] = array 
     (
      'name' => 'ARSENAL', 
      'pts' => 9, 
      'gd' => 1 
     ); 





function array_orderby() 
{ 
    $args = func_get_args(); 
    $data = array_shift($args); 
    foreach ($args as $n => $field) { 
     if (is_string($field)) { 
      $tmp = array(); 
      foreach ($data as $key => $row) 
       $tmp[$key] = $row[$field]; 
      $args[$n] = $tmp; 
      } 
    } 
    $args[] = &$data; 
    call_user_func_array('array_multisort', $args); 
    return array_pop($args); 
} 




$sorted = array_orderby($s, 'pts', SORT_DESC, 'gd', SORT_DESC); 

// Выводит

Array 
(
    [0] => Array 
     (
      [name] => ARSENAL 
      [pts] => 9 
      [gd] => 1 
     ) 

    [1] => Array 
     (
      [name] => MANCHESTER 
      [pts] => 8 
      [gd] => 5 
     ) 

    [2] => Array 
     (
      [name] => LIVERPOOL 
      [pts] => 3 
      [gd] => 5 
     ) 

    [3] => Array 
     (
      [name] => BOURNEMOUTH 
      [pts] => 3 
      [gd] => 2 
     ) 

    [4] => Array 
     (
      [name] => Testing 
      [pts] => 2 
      [gd] => 6 
     ) 

    [5] => Array 
     (
      [name] => STOKE CITY 
      [pts] => 2 
      [gd] => 4 
     ) 

) 
+0

Не работает, тот же результат, что и выше. –

+0

@HaykMakyanv вы можете рассказать мне, каково ваше требование ... потому что я уже тестировал –

 Смежные вопросы

  • Нет связанных вопросов^_^