2016-08-01 9 views
0

Ich habe ein Array mit d-meine Werte, die ich sortieren müssen, aber meine Funktion isnt richtig funktioniert, alle Ideen auf, wie kann ich es beheben?Sortier Array Daten enthalten mit usort nicht funktioniert

Jedes Array-Element ist im folgenden Format enthalten: "TB" + TT + MM + JJ + "12" (sorry nicht meine Schuld xD), so zuerst muss ich die zusätzlichen Zeichenfolgen entfernen und dann das Datum neu anordnen ein mmddyy Format es mktime

usort($periodos, 'date_compare'); 

function date_compare($a, $b) { 
    // Reomves "TB" at the beginning and "12" at the end 
    $t1 = substr($a, 2, -2); 
    $t2 = substr($b, 2, -2); 

    $t1 = mktime(0, 0, 0, substr($t1, 4, 2), substr($t1, 2, 2), substr($t1, 6, 2)); 
    $t2 = mktime(0, 0, 0, substr($t2, 4, 2), substr($t2, 2, 2), substr($t2, 6, 2)); 

    return $t1 - $t2; 
} 

aber einige Tage sind dran mit konvertieren ... und ich verstehe nicht, was andernfalls werden kann, ist der Ausgang:

Array (151) { [0] = > string (10) "TB07010012" [1] => string (10) "TB23040012" [2] => string (10) "TB26050012" [3] => string (10) "TB28050012" [4] => string (10) "TB21050012" [5] => Zeichenfolge (10) "TB07050012" [6] => string (10) "TB25060012" [7] => string (10) "TB16070012" [8] => string (10) "TB24090012" [ 9] => string (10) "TB31121312" [10] => string (10) "TB09011412" [11] => string (10) "TB16011412" [12] => string (10) "TB300 11412" [13] => string (10) "TB23011412" [14] => string (10) "TB06021412" ..... .....

und wie Sie können alles scheint in Ordnung zu sein, bis das Element 12 (300114 -> jan 30 2014) nach Element 13 (230114 -> 23 jan 2014) sein sollte. Es gibt noch andere ähnliche Fehler, aber das Array ist 151 Elemente lang, also denke ich nicht, dass es notwendig ist per Post all ..

Danke für Ihre Hilfe

+0

Try strcmp ($ t1, $ t 2) statt $ t1 - $ t2 – mseifert

+0

Nope ... es funktioniert tat nicht, bleibt der Fehler dort – Chico3001

+0

Sie kann versuchen, das Array mithilfe von Zeitstempeln neu zu schreiben und das Datum im richtigen Format bei der Ausgabe neu zu erstellen. – Nitin

Antwort

0

nach einigen Vorschlägen ich bemerkte, dass meine substr Indizes sind falsch ... im verlassen die corre ct Funktion hier, falls jemand das gleiche Problem hat ...

function date_compare($a, $b) { 
    // Reomves "TB" at the beginning and "12" at the end 
    $t1 = substr($a, 2, -2); 
    $t2 = substr($b, 2, -2); 

    $t1 = mktime(0, 0, 0, substr($t1, 2, 2), substr($t1, 0, 2), substr($t1, 4, 2)); 
    $t2 = mktime(0, 0, 0, substr($t2, 2, 2), substr($t2, 0, 2), substr($t2, 4, 2)); 

    return $t1 - $t2; 
} 
+0

Wenn Sie zufrieden sind, ist dies die richtige Antwort auf Ihre Frage, Sie sollten es akzeptieren. – rjdown

+0

ich werde tun ... aber ich muss 2 Tage warten, danke !! – Chico3001