Benjamin Keil: Mehrdimensionales Array sortieren, versteh es nicht...

Hallo,

ich habe vergeblich überall gesucht.
Im Forumsarchiv scheint es auch viel zu geben,
aber die Links sind tot ;-(

Ich habe folgendes, mehrdimensionales Array:

$liste = array(
 1 => array ("200", "blabla", "irgendwas", "hallo"),
 2 => array ("135", "blabla", "irgendwas", "hallo"),
 3 => array ("956", "blabla", "irgendwas", "hallo"),
 4 => array ("632", "blabla", "irgendwas", "hallo"),
);

Das ganze wird mit foreach($liste as $eintrag) ausgegeben.

Welche Sortierfunktion brauche ich um das vorher nach
dem ersten Wert (2oo, 135, 956 und 632) zu sortieren?

Falls es asort sein sollte, wie packe ich das an?

Verzeiht meine Blindheit,
Gruß

Ben

  1. Ich würde es mal mit usort (http://de.php.net/manual/de/function.usort.php) und einer eigenen Vergleichsfunktion probieren..

  2. Hallo Ben,

    ich weiß nicht, ob es dir was hilft, aber nimm doch doch einfach den Wert, nach dem Du sortieren willst als Schlüssel sortiere mit ksort danach?
    <?php
    $liste = array();
    $liste = array(
     200 => array ("200", "blabla", "irgendwas", "hallo"),
     135 => array ("135", "blabla", "irgendwas", "hallo"),
     956 => array ("956", "blabla", "irgendwas", "hallo"),
     632 => array ("632", "blabla", "irgendwas", "hallo"),
    );

    ksort($liste);
    print_r($liste);

    ?>
    bei mir hats eben geklappt...
    gruß, Barbara

    1. Hallo Barbara

      ich weiß nicht, ob es dir was hilft, aber nimm doch doch einfach den Wert, nach dem Du sortieren willst als Schlüssel sortiere mit ksort danach?

      Wo und wie muss ich den Schlüssel denn angeben?

      ksort($liste);
      print_r($liste);

      ?>
      bei mir hats eben geklappt...

      Merkwürdig, bei diesem Beispiel klappts,
      aber bei anderen Werten leider nicht.

      ksort scheint richtig zu sein, aber das Beispiel
      http://www.php.net/manual/de/function.ksort.php bekomme
      ich darauf einfach nicht übertragen.

      Gruß,

      Ben

      1. hallo Ben,
        verstehe nicht ganz das Problem, bei gehts auch mit anderen Werten, siehe unten.
        Ich weiß nicht, ob Du das für dich jetz kalter Kaffee ist, besser erklärt sicherlich unter http://www.php.net/manual/de/language.types.array.php
        Gruß! Barbara

        <?
        $listee = array(
         200 => array ("200", "blabla", "irgendwas", "hallo")
        );

        200 vor dem Pfeil ist der Schlüssel

        Werte mit selbstdefiniertem Schlüssel später hinzufügen:

        $listee["neuer Schlüssel als string"] = array("200", 5);

        oder numerisch ohne anführungzeichen :-)

        $listee[123] = array ("200", "blabla");
        print_r($listee);

        ksort($listee);
        print_r($listee);
        /*
        Array
        (
            [neuer Schlüssel als string] => Array
                (
                    [0] => 200
                    [1] => 5
                )

        [123] => Array
                (
                    [0] => 200
                    [1] => blabla
                )

        [200] => Array
                (
                    [0] => 200
                    [1] => blabla
                    [2] => irgendwas
                    [3] => hallo
                )

        )
        */
        $fruits = array ("d"=>"Zitrone", "a"=>"Orange", "b"=>"Banane", "c"=>"Apfel");

        von http://www.php.net/manual/de/function.ksort.php

        ist ja ein eindimensionales Array, aber hier klappts doch auch?

        ?>

        1. hallo Ben,

          sorry, vielleicht habe ich gerade das Entscheidende vergessen, Du kannst latürnich auch eine variable benutzen, um den Schlüssel zu bilden...

          Werte mit selbstdefiniertem Schlüssel später hinzufügen:

          $listee["$DeineVariablealsSchlüssel"] = array("200", 5);

          bis morgen, gehe jetzt schlafen, B.

          1. sorry, vielleicht habe ich gerade das Entscheidende vergessen, Du kannst latürnich auch eine variable benutzen, um den Schlüssel zu bilden...

            Werte mit selbstdefiniertem Schlüssel später hinzufügen:

            $listee["$DeineVariablealsSchlüssel"] = array("200", 5);

            bis morgen, gehe jetzt schlafen, B.

            Jetzt geht mir ein großes Licht auf! Das mit dem Schlüssel
            hab ich zuerst nicht verstanden, jetzt ist alles klar,
            wenn der Schlüssel zu dem zu sortierenden Wert wird,
            dann kann man mit ksort das Array sortieren.

            Bevor man versucht php zu verstehen muss man zuerst lernen
            um die Ecke zu denken ;-)

            Der Link war kein 'kalter Kaffee', hab's zwar schon des
            gelesen, auch im Buch, aber irgendwie übersieht
            man das eine oder andere immer wieder...

            Schlaf schön,

            Ben

            P.S. Noch eine kleine Frage, falls das hier noch jemand liest,
            möchte keinen neuen Thread dafür aufmachen:

            Irgendwo hab ich mal eine vereinfachung von...

            echo "Variale: $variable <br>/n";

            ...gesehen, find's nicht wieder, weiß' das gerade jemand?

            1. Bevor man versucht php zu verstehen muss man zuerst lernen
              um die Ecke zu denken ;-)

              naja.
              Übrigens so geht es mit der Vergleichsfunktion:

              function cmp($a, $b)
              {
               return ($a[0] - $b[0]);
              }

              $liste = array(
               1 => array ("200", "blabla", "irgendwas", "hallo"),
               2 => array ("135", "blabla", "irgendwas", "hallo"),
               3 => array ("956", "blabla", "irgendwas", "hallo"),
               4 => array ("632", "blabla", "irgendwas", "hallo"),
              );

              usort($liste, "cmp");

              P.S. Noch eine kleine Frage, falls das hier noch jemand liest,
              möchte keinen neuen Thread dafür aufmachen:

              Irgendwo hab ich mal eine vereinfachung von...

              echo "Variale: $variable <br>/n";

              ...gesehen, find's nicht wieder, weiß' das gerade jemand?

              hm... meintest du <?= $variable ?>

              1. Hallo Werner,

                Jetzt verstehe ich auch was Du mit der Vergleichsfunktion
                meinst. Danke, das ist auch eine nette Lösung!!

                Hab' heute wieder einiges dazugelernt.

                hm... meintest du <?= $variable ?>

                Ne, ich meine innerhalb eines PHP-Blocks.

                Wie testest Du den Inhalt einer Variable?
                Ich meine mal eine verkürzte Schreibweise
                von echo "Variale: $variable <br>/n"; gesehen zu haben,
                in der 'variable' nur einmal vorkam, bin mir
                nach Deinem Beispiel aber nicht mehr ganz sicher...

                Gruß,

                Ben

  3. man kann es so machen:

    $newlist = array();
    $liste = array(
     1 => array ("200", "blabla", "irgendwas", "hallo"),
     2 => array ("135", "blabla", "irgendwas", "hallo"),
     3 => array ("956", "blabla", "irgendwas", "hallo"),
     4 => array ("632", "blabla", "irgendwas", "hallo"),
    );
    var_dump ($liste);
    foreach($liste as $index => $value)
    {
     $id=$value[0];
     echo $id;
      $newlist[$id]=$value;
    }
    krsort($newlist);

    aber ich weis das es dafür auch ein befehl gibts, muss ich nochmal scahuen.

    1. $newlist = array();
      $liste = array(
       1 => array ("200", "blabla", "irgendwas", "hallo"),
       2 => array ("135", "blabla", "irgendwas", "hallo"),
       3 => array ("956", "blabla", "irgendwas", "hallo"),
       4 => array ("632", "blabla", "irgendwas", "hallo"),
      );
      var_dump ($liste);

      Was ist var_dumb? Unnötig oder?

      krsort($newlist);

      krsort macht alles falschrum, aber mit rsort geht´s.
      Leider stimmen die ID's (1,2,3,4) nacher nicht mehr,
      aber in diesem Fall brauche ich sie nicht.

      aber ich weis das es dafür auch ein befehl gibts, muss ich nochmal scahuen.

      Das wäre prima!!

      Vielen Dank aber schonmal, so müsste ich es hinbekommen.

      Gruß,

      Ben

      1. krsort macht alles falschrum, aber mit rsort geht´s.

        Ich meine ksort.