Array sortieren ?!

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

  • Array sortieren ?!

    Hallo zusammen,

    ich hab eine wichtige Frage:

    Für eine Suchfunktion hab ich ein Array, in das die IDs der
    gefundenen Datensätze geschrieben werden. Da aber mehrere
    Spalten in verschiedenen Tabellen durchsucht werden,
    tauchen manche IDs mehrmals in dem Array auf. Bisher
    hab ich das Problem mit der Funktion array_unique gemacht,
    das einfach doppelte Werte aus einem Array entfernt.
    Dadurch wurden die Sounds in der Reihenfolge ausgegeben,
    in der sie gefunden wurden. Nun finde ich es aber eigentlich
    viel sinnvoller, die Ergebnisse nach Relevanz zu ordnen.
    Denn wenn ein Suchbegriff in mehreren Spalten vorkommt,
    ist er logischerweise auch wichtiger.
    Theoretisch würde ich die IDs in dem Array nach Häufigkeit
    des Vorkommens sortieren und dann pro einzigartiger ID einmal
    ausgeben.

    wie das Sortieren aber praktisch geht, dafür hab ich keine eingebaute Funktion
    gesehen, und hab auch keine Idee, wie das zu realisieren wäre.

    Besten Dank im voraus,
    Mixman :-)

  • #2
    Hmm, probiers so:
    (Deine Daten sind in $daten. Ich geh davon aus dass $daten["id"] die ID enthält.

    $ids = array();

    foreach($daten as $datensatz)
    {
    $ids[$datensatz["ID"]]++;
    }

    Damit kriegst Du ein Array mit der Anzahl der IDs, z.B. ist $ids[5] dann 15, wenn 15 Datensätze mit der ID 5 existieren. Dann müsstest Du den ganzen Krempel in ein weiteres Array pumpen, etwa so:

    $ranking = array();
    for ($i = 0; $i <= count($ids); $i++)
    { $temp = array();
    $temp["Anzahl"] = $ids[$i];
    $temp["id"] = $i;
    array_push($ranking, $temp);
    }

    So entsteht ein Array, das solche Werte enthält:
    $ranking[2]["Anzahl"] ist 15
    $ranking[2]["id"] ist 5

    Dann musst Du das ganze mit array_multisort nach ["Anzahl"] sortieren, ich bin aber grad zu verpeilt um die komplizierte Syntax zu verstehen! Wer übernimmt!







    Kommentar


    • #3
      Es geht einfacher:

      der Key für jedes Arrayelement wird aus der Anzahl mit führenden Nullen (z.B. 3stellig) und der ID generiert:

      $key = sprintf ('%03d_%03d', $anzahl, $id)

      (Die ID muß angehängt werden, da sonst bei mehreren Punkten mit gleicher Relevanz nur jeweils der zuletzt gelesene angezeigt wird!)

      Dann kannst du das einfach mit krsort absteigend nach Relevanz sortieren
      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

      Lädt...
      X