Sortierfunktion

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

  • Sortierfunktion

    Hallo,

    ich benötige eine Sortierfunktion, die nach der Häufigkeit eines Wertes innerhalb eines Arrays sortiert. Zur Zeit verwende ich folgenden Code, er macht aber nicht so recht, was ich möchte:

    $e=array_count_values($listitem);
    // Anz. Vorkommen jedes Wertes ermitteln

    usort($listitem,sortier);

    function sortier($a, $b)
    {
    global $e;
    global $listitem;
    if ($e[$a]>$e[$b]): return -1;
    elseif ($e[$a]<$e[$b]) : return 1;
    else : return 0;
    endif;
    }

    $listitem=array_unique($listitem); // doppelte Werte "uniquen"

    /\ Haut nich hin...

  • #2
    erstens muss die Funktion erst deklariert werden, bevor du sie benutzt.
    also erst
    function sortier($a, $b) { ... }
    dann
    usort ($listitem,sortier);

    dann sehen wir weiter.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Die Funktion vor den Funktionsaufruf zu setzen hat's leider auch nicht gebracht. Noch ein Tipp?

      Kommentar


      • #4
        <?php

        unset($arr1);
        unset($arr2);
        $arr0=array("ax", "ax", "bx", "dx", "dx", "dx", "fx", "gx", "gx", "kx", "kx", "kx", "kx", "ich bins", "ich bins");

        $arr1=array_count_values($arr0);

        while(list($k, $v) = each($arr1)):
        $arr2[]=array($v,$k);
        endwhile;
        rsort($arr2);

        for($i=0; $i<count($arr2); $i++)
        {
        echo $arr2[$i][0] . "; " . $arr2[$i][1] . "<br>";
        }

        ?>

        Das ist zwar keine Funktion, liefert aber immerhin was du willst.
        Falls du das in Form einer Funktion hinkriegst würde mich das interessieren, wie die ausschaut. Scheint mir nicht so einfach zu sein.
        mfg

        Kommentar


        • #5
          Funktioniert nur, wenn der Ausgangsarray (hier $arr0) eindimensional ist

          PHP-Code:
          <?php

          $arr0
          =array("ax""ax""bx""dx""dx""dx""fx""gx""gx""kx""kx""kx""kx""ich bins""ich bins");

          function 
          sortier_match($a
          {
          $r $s $t = array();
          $r array_count_values($a);

              while(list(
          $k$v) = each($r)):
              
          $s[]=array($v,$k);
              endwhile;
              
          rsort($s); // Sortierung absteigend nach Treffer

              
          for($i=0$i<count($s); $i++)
              
          $t[]=$s[$i][1];

          return 
          $t;
          }

          $resultat sortier_match($arr0);

          for(
          $i=0$i<count($resultat); $i++)
          {
          echo 
          $resultat[$i] . "<br>";
          }

          ?>

          Kommentar


          • #6
            Geht noch nen Zacken kürzer:

            function sortier_match($a)
            {
            $r = $s = array();
            $r=array_count_values($a);
            arsort($r);

            while(list($k, $v) = each($r)):
            $s[]=$k;
            endwhile;

            return $s;
            }

            Kommentar

            Lädt...
            X