Ankündigung

Einklappen
Keine Ankündigung bisher.

array nach mehreren atributen sortieren

Einklappen

Neue Werbung 2019

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

  • array nach mehreren atributen sortieren

    hallo...
    ich habe ein kniffliges problem, doch ich finde keine lösung.
    ich habe z.b. folgendes array:

    $fahrer[0]["Name"]=Fahrer 1
    $fahrer[0]["Zeit"]=1234
    $fahrer[0]["Punkte"]=10
    $fahrer[1]["Name"]=Fahrer 2
    $fahrer[1]["Zeit"]=1235
    $fahrer[1]["Punkte"]=18
    $fahrer[2]["Name"]=Fahrer 3
    $fahrer[2]["Zeit"]=1234
    $fahrer[2]["Punkte"]=9
    $fahrer[3]["Name"]=Fahrer 4
    $fahrer[3]["Zeit"]=1233
    $fahrer[3]["Punkte"]=5

    dieses möchte ich nun nach der zeit sortieren. dies mache ich folgender maßen:

    Code:
    function sor1($a, $b){
    return strnatcasecmp($a["Zeit"], $b["Zeit"]);};
    usort($fahrer, "sor1");
    soweit so gut, doch jetzt möchte ich das bei zeitgleichheit wie bei fahrer 3 und 1 die bessere punktzahl die reihenfolge entscheidet... hat jemand eine idee wie man das verwirklichen kann?
    danke für tipps

  • #2
    PHP-Code:
    <?php
    function sor1($a$b){
    $n strnatcasecmp($a["Zeit"], $b["Zeit"]);
    return (
    $n==0)?strnatcasecmp($b["Punkte"], $a["Punkte"]):$n;
    }
    usort($fahrer"sor1");
    ?>

    Kommentar


    • #3
      funktioniert... wow, besten dank!

      Kommentar


      • #4
        sagt mal, bekommt man das auch mit drei atributen hin?
        also in erster instanz nach zeit, dann nach punkte und wenn das alles gleich ist auch noch alphabetisch nach name sortieren?

        ich habs versucht, doch bekomme es leider nicht hin...

        Kommentar


        • #5
          kann mir denn keiner einen tipp geben?

          Kommentar


          • #6
            Als oberen Index die Zeit nehmen (nicht den obersten, sonst überschreibst du dir vielleicht Einträge).

            $fahrer[]["1245"] = array("Name" => "Peter", "Punkte" => 5);
            $fahrer[]["1252"] = ...

            Kommentar


            • #7
              Der Tipp von Buhmann etwas auseinandergezogen und etwas anders notiert hilft Dir vielleicht weiter.
              PHP-Code:
              <?php
              function sor1($a$b) {
                  
                  
              $vergleich=strnatcasecmp($a['Zeit'], $b['Zeit']);

                  if (
              $vergleich==0) {
                      
              $vergleich=strnatcasecmp($a['Punkte'], $b['Punkte']);
                  }
                  
              // hier weitere Vergleiche bei $vergleich==0 einfügen
                  
              return $vergleich;
              }

              usort($fahrer"sor1"); 
              ?>

              Kommentar


              • #8
                ah ja, jetzt hab ich es geschnallt...
                besten dank

                Kommentar

                Lädt...
                X