2016-03-31 20 views
0

Ich versuche ein mehrdimensionales Array nach Datum zu sortieren ASC, aber ich habe Probleme mit ... also möchte ich euch Jungs und Mädchen fragen, warum das passiert?Mehrdimensionales Array nach Wert sortieren nicht richtig sortieren

mein Code (Run an: Codepad example):

$data = array (
      array (
      'date' => '2016-03-11 12:10:17', 
      'type' => '1' 
     ), 
      array (
      'date' => '2016-03-12 07:16:25', 
      'type' => '1' 
     ), 
      array (
      'date' => '2016-03-12 07:18:07', 
      'type' => '2' 
     ), 
      array (
      'date' => '2016-03-09 14:57:42', 
      'type' => '2' 
     ), 
      array (
      'date' => '2016-02-22 10:39:39', 
      'type' => '1' 
     ) 
    ); 
    usort($data, function($a, $b) { 
     return $a['date'] - $b['date']; 
    }); 
    echo '<pre>'; 
    var_dump($data); 

Das Problem ist, dass die Sortierung ist nicht gut, ich meine es von Februar bis März sein müssen und dies nicht zu tun, und ich kann‘ Warum nicht?

Jede Hilfe wird sehr geschätzt!

+0

Was funktioniert nicht genau? Haben Sie Fehler? Was hast du versucht, es zu beheben? Bitte lesen und befolgen Sie die Anweisungen auf dieser Seite, um eine qualitativ hochwertige Frage zu stellen: http://stackoverflow.com/help/how-to-ask –

Antwort

1

Sie vergleichen Strings, nicht die Nummer, so dass Sie zu unerwarteten Ergebnissen führen.

zwei Strings zu vergleichen, können Sie strcmp verwenden:

usort($data, function($a, $b) { 
    return strcmp($a['date'], $b['date']); 
}); 

strcmp kehrt < 0, wenn erste arg kleiner als der zweite; > 0, wenn das erste Argument größer als das zweite ist, und 0, wenn sie gleich sind.