2014-03-13 1 views
0

Я получаю этот результат после выполнения следующего массива. Разве это не должно сортироваться по «computer_name»? Вы увидите, что это не альфа-порядок.сортировка php массива по значению не работает как ожидалось

usort($test, function($a, $b) { 
    return $a['computer_name'] - $b['computer_name']; 
}); 

echo "<pre>"; 
print_r($test); 
echo "</pre>"; 


Array 
(
    [0] => Array 
     (
      [computer_id] => 367 
      [account_id] => 1 
      [computer_name] => EXAMPLE_ONE 
      [last_username] => muah 
      [timestamp] => 2014-01-01 17:06:04 
     ) 

    [1] => Array 
     (
      [computer_id] => 366 
      [account_id] => 1 
      [computer_name] => TESTING 
      [last_username] => 
      [timestamp] => 2013-12-06 20:02:14 
     ) 

    [2] => Array 
     (
      [computer_id] => 365 
      [account_id] => 1 
      [computer_name] => JOE-SCHMOE 
      [last_username] => 
      [timestamp] => 2013-12-06 20:02:03 
     ) 

    [3] => Array 
     (
      [computer_id] => 18 
      [account_id] => 1 
      [computer_name] => SPORT-ONE 
      [last_username] => 
      [timestamp] => 2012-10-16 03:31:22 
     ) 

    [4] => Array 
     (
      [computer_id] => 3 
      [account_id] => 1 
      [computer_name] => SPORT-TWO 
      [last_username] => 
      [timestamp] => 2011-03-03 03:35:46 
     ) 

) 

ответ

1

Я думаю, что проблема в том, что EXAMPLE_ONE - TESTING или EXAMPLE_ONE - SPORT-ONE всегда равен 0.

Вы можете попробовать использовать strcasecmp здесь, или регистронезависимы версия strcmp

На самом деле, глядя на документацию для usort, здесь есть пример. Ваш пример выше был бы чем-то вроде

usort($test, function($a, $b) { 
    return strcmp($a['computer_name'], $b['computer_name']); 
}); 
+0

Хорошая находка ... это сделало трюк! Я просто предположил, но когда вы объясняете, как вы это делали, это имеет смысл, почему результаты происходят. Благодаря! – user756659