2015-07-10 41 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你能告诉我你的要求是什么吗?因为我已经测试过 –