2015-07-10 45 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 
     ) 

) 
  • 的名字 - 是球隊的名字
  • 點 - 各隊的總積分
  • GD-是各隊的淨勝球

我想通過團隊首先pts排序,那麼如果我們通過具有相同的pts,排序。

只有點的排序,我們有:

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:您可以接受或給予好評這些答案,確實能幫助你的一個。)_ –

回答

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我認爲比兩位數可能是問題,有點像11點2和1點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你能告訴我你的要求是什麼嗎?因爲我已經測試過 –