Multidimensionales Array sortieren

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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]

    Comment


    • #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

      Comment


      • #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]

        Comment


        • #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
          Last edited by AmicaNoctis; 24-12-2009, 07:24. Reason: zusammengeführt

          Comment


          • #6
            Originally posted by schlattm View Post
            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...
            Last edited by AmicaNoctis; 24-12-2009, 07: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]

            Comment


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



              denke das Thema kann als erledigt markiert werden!

              Comment

              Working...