Mehrdimensionales Array doppelt sortieren

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

  • Mehrdimensionales Array doppelt sortieren

    Ich habe folgendes Array:

    $my_array =
    [0] => array( [titel] => "titel 1", [anzahl] => "5") )
    [1] => array( [titel] => "titel xyz", [anzahl] => "6") )
    [2] => array( [titel] => "lala xyz", [anzahl] => "13") )
    [3] => array( [titel] => "abc", [anzahl] => "5") )

    Nun möchte ich das alles komplett erst nach der "anzahl" und anschließend bei denen die Anzahl gleich ist nach "titel" sortieren.

    Im Grunde wie wenn man per MySQL "Ordner by anzahl desc, titel asc" anwendet. Nur kann es nicht direkt per mysql gemacht werden da dass array aus verschiedenen andere Daten zusammengesetzt wird und ich brauche deshalb eine Sortierfunktion per php.

    Hab schon bisschen mit array_multisort rumprobiert aber is nix bei rausgekommen.

    Über produktive Hilfe wäre ich sehr dankbar.

  • #2
    Re: Mehrdimensionales Array doppelt sortieren

    usort()
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      usort habe ich auch schon vergeblich probiert. Zumindest weiß ich nicht welche algorithmus ich dafür erstellen muss.

      ich habe "produktive hilfe" nicht umsonst hingeschrieben.

      Ich wäre diesem Forum sehr dankbar wenn die Hilfe aus mehr als nur einem Wort bestünde.

      Kommentar


      • #4
        Bei usort ist der Algorithmus schon vorgegeben. Du musst nur die Vergleichsfunktion schreiben.

        Und in der vergleichst du dann halt die Anzahlen und gibst für größer und kleiner entsprechend 1 und -1 zurück. Wenn die gleich sind, dann musst du auch noch die titel checken.

        PHP-Code:
        my_cmp_func($a$b) {
            
        // hier noch auf kleiner / größer prüfen
            
        if ($a['anzahl'] == $b['anzahl']) {
                if (
        $a['titel'] < $b['titel']) {
                    return -
        1;
                } else {
                    return 
        1;
                }
            }

        Ob das mit usort im Endeffekt dann aber korrekt arbeitet, musst du am besten durch testen noch herausfinden.
        hopka.net!

        Kommentar


        • #5
          Original geschrieben von tobiasndw
          usort habe ich auch schon vergeblich probiert. Zumindest weiß ich nicht welche algorithmus ich dafür erstellen muss.
          Einen, der den Vergleich zwischen zwei Array-Elementen so durchführt, wie du ihn haben möchtest.
          ich habe "produktive hilfe" nicht umsonst hingeschrieben.
          Wenn du ein Stichwort bekommst, darfst du dir ein "use your brain" dazudenken, auch ohne dass es explizit dazugeschrieben wird.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Toll, wieder so ein arrogantes "wir-sind-nun-mal-schlau-und-du-nicht-forum". Ist ja nicht zum aushalten.

            Kommentar


            • #7
              Wieder mal dämliches Gemecker von einem, der nicht mal für fünf Cent selber nachdenken möchte.

              Das Manual hat doch Beispiele, wie Vergleichsfunktionen für usort aussehen könnten - also wo bitte ist das Problem?
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Nach einer Spalte sortieren ist ja auch total easy.

                Aber es geht halt darum exakt 2 Spalten hintereinander zu sortieren so dass das ergebnis der ersten Sortierung der ersten spalte mit berücksichtigt wird.

                Ist aber toll wie hier neue Mitglieder begrüßt werden.

                Kommentar


                • #9
                  Original geschrieben von tobiasndw
                  Aber es geht halt darum exakt 2 Spalten hintereinander zu sortieren so dass das ergebnis der ersten Sortierung der ersten spalte mit berücksichtigt wird.
                  Noch mal die Frage: Wo ist dabei dein konkretes Problem?

                  Code:
                  Wenn A.Spalte[b]1[/b] == B.Spalte[b]1[/b]
                  dann
                     gebe Ergebnis von Vergleich A.Spalte[b]2[/b] mit B.Spalte[b]2[/b] zurück
                  sonst
                     gebe Ergebnis von Vergleich A.Spalte[b]1[/b] mit B.Spalte[b]1[/b] zurück
                  Ist das so schwer, wenn man ein bisschen sein Hirn benutzt ...?
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Hab es nun hinbekommen.
                    Für alle anderen Suchenden hier der Code:

                    PHP-Code:
                    function compare_treffer_und_titel ($a$b
                    {    
                       if ( 
                    $a['anzahl_treffer'] == $b['anzahl_treffer'] )
                       {     
                            if (
                    $a['titel'] == $b['titel']) 
                                return 
                    0;
                            else
                                return 
                    strcasecmp ($a['titel'], $b['titel']);
                        }
                        else
                            return ( 
                    $a['anzahl_treffer'] > $b['anzahl_treffer'] ) ? -: +1;

                    anzahl_treffer ... besteht aus Zahlen
                    titel ... besteht aus Wörtern

                    Es wird erst nach der Anzahl der Treffer und anschließend nach dem Titel sortiert.

                    Viele Dank für die gute Hilfe freundlicher Moderator.

                    Kommentar


                    • #11
                      Ist aber toll wie hier neue Mitglieder begrüßt werden.
                      @tobiasndw:
                      Nicht traurig sein, geht auch alten Mitgliedern so .....
                      Der Ton ist hier ruppig, aber wenn du es nicht persönlich nimmst hat das auch einen gewissen Unterhaltungswert.
                      Und zumindest ich bekomme hier zu ca. 90% Prozent meiner Fragen nützliche Antworten.
                      so, who cares ....
                      Zuletzt geändert von mcmurphy; 23.08.2006, 10:45.
                      "I don't want to belong to any club that would accept me as a member."

                      Groucho Marx

                      Kommentar

                      Lädt...
                      X