Frage

Ich habe ein Array in diesem Format:

Array
(
    [0] => Array
        (
            [28th February, 2009] => 'bla'
        )

    [1] => Array
        (
            [19th March, 2009] => 'bla'
        )

    [2] => Array
        (
            [5th April, 2009] => 'bla'
        )

    [3] => Array
        (
            [19th April, 2009] => 'bla'
        )

    [4] => Array
        (
            [2nd May, 2009] => 'bla'
        )

) 

Ich möchte, dass sie über die Termine in aufsteigender Reihenfolge sortieren (bezogen auf den Monat, Tag und Jahr). Was ist der beste Weg, das zu tun?

Ursprünglich ist die E-Mails abgerufen werden im MySQL-Datumsformat, so dass du mich möglich, die Anordnung in diesem Zustand zu erhalten:

Array
[
    ['2008-02-28']='some text',
    ['2008-03-06']='some text'
]

Vielleicht, wenn sie in diesem Format, das kann ich durch sie schleife, entfernen Sie alle '-' (Bindestrich) Markierungen, so dass sie als integars gelassen werden, sortiere sie durch sie mit array_sort() und Schleife noch einmal, sie zu sortieren? Würde es vorziehen, wenn es eine andere Art und Weise war, wie ich 3 Schleife tun würde damit pro Benutzer.

Danke.

Edit: Ich könnte auch dies tun:

$array[$index]=array('human'=>'28 Feb, 2009',
                   'db'=>'20080228',
                   'description'=>'Some text here');

Aber diese verwenden, gäbe es eine Möglichkeit, die Anordnung auf dem ‚db‘ Elemente allein zu sortieren?

Edit 2: Aktualisierte Anfangs Var_dump

War es hilfreich?

Lösung

Mit der ISO (yyyy-mm-dd) Format statt der "Englisch" -Format und dann benutzen Sie einfach die ksort Funktion sie in der richtigen Reihenfolge zu erhalten.

Es gibt keine Notwendigkeit, die Bindestriche zu entfernen, ksort wird einen alphanumerischen Vergleich zu dem String-Schlüssel tun, und das yyyy-mm-dd Format funktioniert sehr gut, wie die lexikalische Reihenfolge die gleiche wie die tatsächlichen Datum Ordnung ist.

Bearbeiten Ich sehe Sie jetzt Ihre Frage korrigiert haben zu zeigen, dass Sie tatsächlich ein Array von Arrays haben, und dass der Sortierschlüssel ist in den Unterfeldern. In diesem Fall sollten Sie uksort wie an anderer Stelle zu empfehlen, aber ich würde empfehlen, dass Sie mit Ihrem eigenen bearbeiten gehen und Art auf der Grundlage des DB formatiert Datum, anstatt durch die Menschen lesbare Format Parsing:

function cmp($a, $b)
{
    global $array;
    return strcmp($array[$a]['db'], $array[$b]['db']);
}

uksort($array, 'cmp');

Andere Tipps

Eigentlich verwenden diese:

usort($array, "cmp");

function cmp($a, $b){ 
    return strcmp($b['db'], $a['db']); 
}

:)

function cmp($a, $b) {    
    global $array;    
    return strcmp($array[$a]['db'], $array[$b]['db']); 
}    
uksort($array, 'cmp');

Ich denke, es ist besser usort() Funktion anstelle von uksort() zu verwenden, denn manchmal können Sie `t globale Variablen überhaupt verwenden und trotzdem globale Variablen sind keine gute Praxis auch nicht.

Sie können auch anonyme Funktion verwenden.

// Sort in chronological order.
usort($array, function($a, $b) {
  return strcmp($a['db'], $b['db']);
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top