2016-06-08 118 views
-2

我有一个简单的二维数组:usort并不像预期的那样

$users = array(
    array('user' => 'John', 'points' => '0'), 
    array('user' => 'Paul', 'points' => '0'), 
    array('user' => 'George', 'points' => '0'), 
    array('user' => 'Ringo', 'points' => '0') 
); 

我需要points (DESC)通过name (ASC)对它们进行排序,然后。 这将是我的代码:

function sortByOrder($a, $b) { 
    if($b['points'] == $a['points']) 
     return $a['user'] - $b['user']; 
    else 
     return $b['points'] - $a['points']; 
} 

usort($users, 'sortByOrder'); 

我得到的原始顺序而非字母顺序(因为它们都具有0点目前)。为什么?

+0

用户不是可数。检查返回的布尔值。 –

+1

什么是约翰减去保罗?或者'Ringo'减去'George'? –

回答

1

您需要使用array_multisort

DEMO

$users = array(
    array('user' => 'John', 'points' => '0'), 
    array('user' => 'Paul', 'points' => '0'), 
    array('user' => 'George', 'points' => '0'), 
    array('user' => 'Ringo', 'points' => '0') 
); 

$sort = array(); 
foreach($users as $k=>$v) { 
    $sort['points'][$k] = $v['points']; 
    $sort['user'][$k] = $v['user']; 
} 

array_multisort($sort['points'], SORT_DESC, $sort['user'], SORT_ASC,$users); 

print_r($users); 

结果:

Array 
(
    [0] => Array 
     (
      [user] => George 
      [points] => 0 
     ) 

    [1] => Array 
     (
      [user] => John 
      [points] => 0 
     ) 

    [2] => Array 
     (
      [user] => Paul 
      [points] => 0 
     ) 

    [3] => Array 
     (
      [user] => Ringo 
      [points] => 0 
     ) 

) 

DEMO不同点

1

您需要使用strcmp,所以你的函数的n应像这里这样

function sortByOrder($a, $b) { 
    if($b['points'] == $a['points']) 
    { 
     return strcmp($a['user'], $b['user']); 
    } 
    else{ 
     return $b['points'] - $a['points']; 
    } 
} 

检查:https://eval.in/585383

相关问题