Schnaps: Array Multisort Problem.

Hallo Forum

Ich habe hier ein Array und das möchte ich mit array_multisort() sortieren lassen. Und zwar primär nach dem Key "sol", dann sekundär nach dem Key "pla".  Aber es will gerade nicht wie ich es will. Finde meinen Fehler leider nicht.

!!!!!!!!!!!!!!!
Die Daten kommen aus einer Datenbank, aber leider kann ich sie nicht direkt mit der DB Abfrage sortieren lassen, also bitte nicht order_by als Lösungsvorschlag bringen, ich hier in diesem Fall auf PHP alleine angewiesen.
!!!!!!!!!!!!!!!

Hier mein Code:
--------------------------------------------------------------------
$i=0;
while ($row=mysql_fetch_array($query)){

$data[$i]['besitzer']=$row['besitzer'];
 $data[$i]['sichtweite']=$row['sichtweite'];
 $data[$i]['gal']=$row['gal'];
 $data[$i]['sol']=$row['sol'];
 $data[$i]['pla']=$row['pla'];
 $i++;

}
echo "<pre>";
print_r($data);
echo "<pre><hr><br> <br> <br>";
array_multisort ($data['sol'], SORT_ASC, SORT_NUMERIC,
                 $data['pla'], SORT_ASC, SORT_NUMERIC );
echo "<pre>";
print_r($data);
echo "<pre><hr>";
--------------------------------------------------------------------

Das führt zu der Ausgabe:

--------------------------------------------------------------------
Array
(
    [0] => Array
        (
            [besitzer] => Localhorst
            [sichtweite] => 31
            [gal] => 6
            [sol] => 57
            [pla] => 10
        )

[1] => Array
        (
            [besitzer] => Localhorst
            [sichtweite] => 0
            [gal] => 6
            [sol] => 57
            [pla] => 11
        )

[2] => Array
        (
            [besitzer] => Mephisto II
            [sichtweite] => 0
            [gal] => 6
            [sol] => 59
            [pla] => 3
        )

[3] => Array
        (
            [besitzer] => ezylizt
            [sichtweite] => 25
            [gal] => 6
            [sol] => 62
            [pla] => 2
        )

[4] => Array
        (
            [besitzer] => Bi-Mon
            [sichtweite] => 31
            [gal] => 6
            [sol] => 88
            [pla] => 8
        )

----------------------------------------------

Array
(
    [0] => Array
        (
            [besitzer] => Localhorst
            [sichtweite] => 31
            [gal] => 6
            [sol] => 57
            [pla] => 10
        )

[1] => Array
        (
            [besitzer] => Localhorst
            [sichtweite] => 0
            [gal] => 6
            [sol] => 57
            [pla] => 11
        )

[2] => Array
        (
            [besitzer] => Mephisto II
            [sichtweite] => 0
            [gal] => 6
            [sol] => 59
            [pla] => 3
        )

[3] => Array
        (
            [besitzer] => ezylizt
            [sichtweite] => 25
            [gal] => 6
            [sol] => 62
            [pla] => 2
        )

[4] => Array
        (
            [besitzer] => Bi-Mon
            [sichtweite] => 31
            [gal] => 6
            [sol] => 88
            [pla] => 8
        )

Also nichts sortiert!

Wo hab ich denn mal wieder meinen denkfehler rein gepackt.

Freundlichen Gruß
Schnaps

  1. Hi Schnaps,

    [sol] => 57 [pla] => 10
                [sol] => 57 [pla] => 11
                [sol] => 59
                [sol] => 62
                [sol] => 88

    Also nichts sortiert!

    Wieso nicht, ist doch prima sortiert. sol ist aufsteigend und wenn sol gleich ist, ist pla aufsteigend. Wo ist Dein Problem?

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    sh:( fo:) rl:( br:> ch:~ n4:& ie:% mo:) va:| de:< zu:| fl:( ss:) ls:[
    1. Ach Mist, hatte ich das Array nicht weit genug gepastet, wollte den Post nicht zu lang machen.

      Es geht danach so weiter in dem angeblih sortierten Array.

      Array
      (
          [0] => Array
              (
                  [besitzer] => Localhorst
                  [sichtweite] => 31
                  [gal] => 6
                  [sol] => 57
                  [pla] => 10
              )

      [1] => Array
              (
                  [besitzer] => Localhorst
                  [sichtweite] => 0
                  [gal] => 6
                  [sol] => 57
                  [pla] => 11
              )

      [2] => Array
              (
                  [besitzer] => Mephisto II
                  [sichtweite] => 0
                  [gal] => 6
                  [sol] => 59
                  [pla] => 3
              )

      [3] => Array
              (
                  [besitzer] => ezylizt
                  [sichtweite] => 25
                  [gal] => 6
                  [sol] => 62
                  [pla] => 2
              )

      [4] => Array
              (
                  [besitzer] => Bi-Mon
                  [sichtweite] => 31
                  [gal] => 6
                  [sol] => 88
                  [pla] => 8
              )

      [5] => Array
              (
                  [besitzer] => DiscoStew
                  [sichtweite] => 60
                  [gal] => 6
                  [sol] => 111
                  [pla] => 11
              )

      [6] => Array
              (
                  [besitzer] => KonPo
                  [sichtweite] => 27
                  [gal] => 6
                  [sol] => 28
                  [pla] => 10
              )

      [7] => Array
              (
                  [besitzer] => EJ
                  [sichtweite] => 35
                  [gal] => 6
                  [sol] => 71
                  [pla] => 10
              )

  2. Moin!

    Ich habe hier ein Array und das möchte ich mit array_multisort() sortieren lassen.

    Nein, du verwendest lieber usort() und schreibst dir eine eigene Vergleichsfunktion, welche der Sortierung sagt, welches Element nach "vorne" muß, weil es "kleiner" ist. Beispiel 2 ist deine Grundlage, es muß lediglich noch um etwas Code in der Funktion "cmp" erweitert werden, um nicht nur ein Arrayelement zu vergleichen, sondern bei Gleichheit des ersten noch einen zweiten (oder dritten, vierten) Vergleich zu machen.

    $i=0;
    while ($row=mysql_fetch_array($query)){

    $data[$i]['besitzer']=$row['besitzer'];
    $data[$i]['sichtweite']=$row['sichtweite'];
    $data[$i]['gal']=$row['gal'];
    $data[$i]['sol']=$row['sol'];
    $data[$i]['pla']=$row['pla'];
    $i++;
    }

      
    Warum so kompliziert?  
    $data[$i] = $row;  
    Ganz simpel und einfach.  
      
     - Sven Rautenberg