2016-10-09 4 views
3

Ich habe ein Array wie unten. Ich möchte dieses Array in absteigender Reihenfolge mit Datum sortieren. Aber mein Code funktioniert nicht.Sortieren Sie ein Array nach Datum in absteigender Reihenfolge mit PHP?

$tbData = Array 
(
    [0] => Array 
     (
      [0] => Baby Boo 
      [1] => 31921 
      [2] => 07 Oct, 2016 07:27 pm 
     ) 

    [1] => Array 
     (
      [0] => Moonshine 
      [1] => 32110 
      [2] => 07 Oct, 2016 09:12 pm 
     ) 


    [2] => Array 
     (
      [0] => Hulk 
      [1] => 31374 
      [2] => 13 Sep, 2016 03:00 pm 
     ) 

    [3] => Array 
     (
      [0] => Sweet SHAI 
      [1] => 667 
      [2] => 05 Oct, 2016 09:36 am 
     ) 

    [4] => Array 
     (
      [0] => Hulk 
      [1] => 31374 
      [2] => 13 Sep, 2016 03:01 pm 
     ) 

    [5] => Array 
     (
      [0] => Maple 
      [1] => 2270 
      [2] => 08 Oct, 2016 07:31 am 
     ) 

    [6] => Array 
     (
      [0] => Josie 
      [1] => 
      [2] => 08 Oct, 2016 04:40 pm 
     ) 
) 

Ich versuche, diese Frage mit dieser Stackoverflow Frage für mich Sort array by date in descending order by date in php .Aber sein Arbeiten nicht zu lösen.

Mein Code wie unten:

$name = 2; 
usort($tbData, function ($a, $b) use (&$name) { 
    return strtotime($a[$name]) - strtotime($b[$name]); 
}); 

Meine Datumsspalte abgelegt ist etwas anderes. Aus diesem Grund funktioniert mein Code möglicherweise nicht. Gibt es eine andere Lösung? Brauche deine Hilfe.

Vielen Dank im Voraus.

+0

gibt es eine andere alternative Lösung was kann mir helfen? @ fvu – Faisal

Antwort

2

Wie in den Kommentaren gesagt, ist das Kernproblem hier, dass strtotime Ihr Datum Uhrzeitformat nicht versteht. Sie hätten das herausfinden können, indem Sie den Rückgabewert betrachten, der FALSE ist, wenn die Konvertierung fehlschlägt.

So ist die Lösung eine andere Funktion zu verwenden, um die Konvertierung zu tun, zum Beispiel date_create_from_format und extrahieren die Epoche zweiten Wert aus dieser Datetime date_timestamp_get mit denen zu vergleichen, wie folgt aus:

usort($tbData, function ($a, $b) { 
    $sa = date_create_from_format('d M, Y H:i a',$a[2]); 
    $sb = date_create_from_format('d M, Y H:i a',$b[2]); 
    return date_timestamp_get($sa) - date_timestamp_get($sb); 
}); 
+0

Dank seiner Arbeit. aber seine aufsteigende Reihenfolge. Ich denke, deine Rückkehr funktioniert so für absteigende Reihenfolge. Rückgabe date_timestamp_get ($ sb) - date_timestamp_get ($ sa); – Faisal

Verwandte Themen