2 Stimmen

Sortieren mehrerer Arrays in PHP

Hat jemand eine Idee, wie kann ich dieses Array nach Schlüssel (Datum) in PHP sortieren?

Array
(   
    [2011-02-16] => Array
        (
            [date] => 2011-02-16
            [num] => 2
        )

    [2011-02-11] => Array
        (
            [date] => 2011-02-11
            [num] => 0
        )

    [2011-02-17] => Array
        (
            [date] => 2011-02-17
            [num] => 0
        )

    [2011-02-18] => Array
        (
            [date] => 2011-02-18
            [num] => 0
        )

)

7voto

shamittomar Punkte 44872

Verwenden Sie die uasort Funktion, die eine benutzerdefinierte Sortierung ermöglicht. Zum Beispiel so:

function cmp($a, $b)
{
    if ($a['date'] == $b['date'])
    {
        return 0;
    }
    return ($a['date'] < $b['date']) ? -1 : 1;
}

uasort($your_array, "cmp");

2voto

madmik3 Punkte 6909

0voto

Dutchie432 Punkte 28344

Aber sicher doch. Ich habe genau diesen Beitrag gestern auch beantwortet.

Sortieren von 2 Arrays, um den höchsten Wert in dem einen und den niedrigsten Wert in dem anderen zu erhalten

In Ihrem Fall wird es etwa so aussehen...

$myArray= subval_sort($myArray,'date'); 

function subval_sort($a,$subkey) {
    foreach($a as $k=>$v) {
        $b[$k] = strtolower($v[$subkey]);
    }
    asort($b);
    foreach($b as $key=>$val){
        $c[] = $a[$key];
    }
    return $c;
}

EDIT

Die Antwort von shamittomar ist aber besser :)

0voto

diagonalbatman Punkte 16920

Dies sollte Ihnen helfen, die Grundlagen der Array-Sortierung in PHP aufzufrischen

http://www.the-art-of-web.com/php/sortarray/

So etwas würde Ihr Problem jedoch lösen:

usort($array, "cmp");

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

0voto

Paul Dixon Punkte 286600

Nun, als Sortierung auf dem Schlüssel würde es reichen, ksort() würde für Sie funktionieren!

Wenn Sie aber wirklich nach dem Datumselement sortieren wollen, würden Sie uasort() mit einer Sortierfunktion wie dieser

  function compare($a, $b)
  {
      if ($a['date']==$b['date']) return 0;
      return ($a['date']>$b['date'])?1:-1;
  }

  uasort($myarray, 'compare');

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X