Fischer: Mehdimensionalen Array sortieren nach Daum

Hi,

hab folgendes Problem: Ich will einen unsortierten mehrdimensionalen Array nach dem Datum, das im ersten Array steht, sortiere. Dafür wollte ich die Funktion "uasort" benutzen. Allerdings funzt bei mir die Werteübergabe an die Bewerte-Funktion(-1,0,1) nicht. Wenn ich die Funktion normal aufrufe, mit den beiden Daten als String, bekomme ich aber den richtigen Rückgabewert. Was mache ich falsch???

Der Aray:

Array (
[24.09.2007] => Array ( [Kurztitel] => Test [Beschreibung] => Beschreibung test )
[27.05.2007] => Array ( [Kurztitel] => Testaa2 [Beschreibung] => beschreibung 2 )
[28.10.2008] => Array ( [Kurztitel] => nummer3 [Beschreibung] => beschrebung 3 ) ..
..
..
(so gehts immer weiter)

Die Funktion:

function sortiere ($item1, $item2) {

$d1=$item1[0].$item1[1];
$m1=$item1[3].$item1[4];
$y1=$item1[6].$item1[7].$item1[8].$item1[9];

$d2=$item2[0].$item2[1];
$m2=$item2[3].$item2[4];
$y2=$item2[6].$item2[7].$item2[8].$item2[9];

$d1=(int)$d1;
$m1=(int)$m1;
$y1=(int)$y1;
$d2=(int)$d2;
$m2=(int)$m2;
$y2=(int)$y2;

if (y1 == y2)
  {
    if (m1 == m2)
     {
        if (d1 == d2)
         {return 0; }
        else
           if (d1 > d2) {return 1; }
          else
           if (d1 < d2) { return -1;}
      }
    else
        if (m1 > m2) {return 1 ;}
       else
        if (m1 < m2) { return -1;}
  }
else
    if (y1 > y2) {return 1 ;}
  else
    if (y1 < y2) { return -1;}

}

Übergeben tu ich den array so: uasort($meinarray, 'sortiere');

Zum Datum: Das steht immer so: 'dd.mm.yyyy'

Wo ist mein Denkfehler???

Vielen Dank für eure Hilfe!!!

P.S. Bin noch ganz neu in PHP und kenne mich noch nicht so gut aus, also bitte nicht zu streng :-)
Falls ihr meint eine Datenbank wäre besser: Klar, nur leider gehts nur so mit Arrays, da ich diesen aus einer INI-Datei parse, die ein Delphi-Projekt benötigt.

  1. echo $begrüßung;

    hab folgendes Problem: Ich will einen unsortierten mehrdimensionalen Array nach dem Datum, das im ersten Array steht, sortiere.

    Array (
    [24.09.2007] => Array ( [Kurztitel] => Test [Beschreibung] => Beschreibung test )
    [27.05.2007] => Array ( [Kurztitel] => Testaa2 [Beschreibung] => beschreibung 2 )
    [28.10.2008] => Array ( [Kurztitel] => nummer3 [Beschreibung] => beschrebung 3 ) ..

    Dass du als Wert deines Arrays eine komplexe Struktur hast ist doch für dein Problem nebensächlich, denn du möchtest nach den Keys des Arrays sortieren.

    Dafür wollte ich die Funktion "uasort" benutzen.

    Die sortiert ja auch nach den Werten und nicht nach den Keys. Sie übergibt an deine Vergleichsfunktion ('sortiere' ist eigentlich ein nicht ganz passender Name, 'vergleiche' passt eher) die Werte, also das jeweilige Array mit den Datensätzen. Die Funktion uksort() übergibt stattdessen die Keys an die Vergleichsfunktion.

    Zum Datum: Das steht immer so: 'dd.mm.yyyy'

    Wenn du das umschreiben kannst in eine Form Jahr-Monat-Tag, dann lässt sich das einfacher vergleichen.

    Du kannst auch das Datum der jetzigen Form am Punkt trennen und vergleichbar zusammensetzen. Dann brauchst du nur noch die strcmp()-Funktion zu verwenden und fertig ist der Vergleich.

    $datum1 = explode('.', $datum1);
    $datum1 = sprintf('%04s-%02s-%02s', $datum1[2], $datum1[1], $datum1[0]);
    $datum2 = // gleiche Prozedur wie bei $datum1
    return strcmp($datum1, $datum2);

    echo "$verabschiedung $name";

    1. Danke! Problem gelöst!