Multidimensionales Array sortieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Multidimensionales Array sortieren

    Hallo zusammen...

    Ich stehe gerade extrem auf dem Schlauch. Habe hier auch schon einiges über die Problematik gelesen, aber irgendwie war ich für die Antworten zu doof

    Nun, zu meinem Problem. Ich habe ein Array, sagen wir:

    PHP-Code:
    $a[1]['sort'] = 6;
    $a[1]['x'] = "blabal";

    $a[2]['sort'] = 3;
    $a[2]['x'] = "adfjlka";

    $a[3]['sort'] = 9;
    $a[3]['x'] = "kadfjl"
    das sieht also mit print_r so aus:
    Array
    (
    [1] => Array
    (
    [sort] => 6
    [x] => blabal
    )

    [2] => Array
    (
    [sort] => 3
    [x] => adfjlka
    )

    [3] => Array
    (
    [sort] => 9
    [x] => kadfjl
    )

    )
    nun möchte ich das ganze nach [sort] sortieren, also das Array mit dem höchsten [sort]-Wert soll an erster Stelle stehen. Das Ergebnis wäre dann:

    Array
    (
    [1] => Array
    (
    [sort] => 9
    [x] => kadfjl
    )

    [2] => Array
    (
    [sort] => 6
    [x] => blabal
    )

    [3] => Array
    (
    [sort] => 3
    [x] => adfjlka
    )

    )
    soweit ich verstanden habe, komme ich mit array_multisort da nicht weiter.

    Kann mir wer auf die Sprünge helfen?

    Vielen Dank bereits im voraus.

    Marco

  • #2
    Hallo,

    schau dir mal die usort-Familie an, die arbeitet mit einer Vergleichs-Callback-Funktion, in der du dann halt nur
    PHP-Code:
    $a["sort"] - $b["sort"
    zurückgeben musst.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hallo Amica,

      ich glaub, ich habs hingekriegt.. (zugegebenerweise noch mit weiterer E-Mail Unterstützung *gg*)

      PHP-Code:
      $array[1]['sort'] = 6;
      $array[1]['x'] = "blabal";
      $array[2]['sort'] = 3;
      $array[2]['x'] = "adfjlka";
      $array[3]['sort'] = 19
      $array[3]['x'] = "asdjfladfk";

      function 
      vergleiche($a$b){
            if (
      $a["sort"] <> $b["sort"]) {
                   return (
      $a["sort"] < $b["sort"]);
                  }
                  else { 
                      return 
      strcmp($a["sort"], $b["sort"]);
                  }
      }

      usort($array'vergleiche');

      echo 
      "<pre>";
      print_r($array);
      echo 
      "</pre>"
      =>

      Code:
      Array
      (
          [0] => Array
              (
                  [sort] => 19
                  [x] => asdjfladfk
              )
      
          [1] => Array
              (
                  [sort] => 6
                  [x] => blabal
              )
      
          [2] => Array
              (
                  [sort] => 3
                  [x] => adfjlka
              )
      
      )
      jetzt muss ichs nur noch kapieren, dann bin ich zufrieden

      Kommentar


      • #4
        Die Vergleichsfunktion ist aber ganz schöner Käse, warum hast du nicht das genommen, was ich gepostet hab?
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          wenn ich dich also richtig verstehe, wäre der code der function dann folgendermassen:

          PHP-Code:
          function vergleiche($a$b){
              return (
          $a['sort'] - $b['sort']);

          habe das ganze gerade nochmals getestet, scheint als hätte ich gester irgendwas falsch gemacht!! jetzt funktionierts fast *gg*
          das ganze wird nur noch falsch sortiert... (möchte den höchsten Wert auf Position 1, den tiefsten auf der letzten)

          lese mich nochmals durchs manual

          [COLOR="Red"]*join*[/COLOR]

          leider kann ich meinen Beitrag nicht editieren, deshalb der Doppelpost, sorry...

          wenn man doch nur logisch überlegen würde... dann macht das ja dann

          PHP-Code:
          function vergleiche($a$b){
              return (
          $b['sort'] - $a['sort']);

          so einfach wärs... danke dir dass du mir auf die sprünge geholfen hast
          Zuletzt geändert von AmicaNoctis; 24.12.2009, 08:24. Grund: zusammengeführt

          Kommentar


          • #6
            Zitat von schlattm Beitrag anzeigen
            wenn ich dich also richtig verstehe, wäre der code der function dann folgendermassen:

            PHP-Code:
            function vergleiche($a$b){
                return (
            $a['sort'] - $b['sort']);

            Genau, aber wenn du es absteigend haben möchtest, musst du noch $a und $b vertauschen:
            PHP-Code:
            function vergleiche ($a$b) {
                return 
            $b['sort'] - $a['sort'];

            Edit: doch zu langsam...
            Zuletzt geändert von AmicaNoctis; 24.12.2009, 08:23.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              ja, habs grad danach auch rausgekriegt... hihi



              denke das Thema kann als erledigt markiert werden!

              Kommentar

              Lädt...
              X