Sortierfunktion
Mario Steinko
- php
Hi!
Ich hab ein Array mit Einträgen, die ich gerne nach Plätzen ordnen würde.
Dafür hab ich eine Funktion die 2 Einträge vergleicht und sagt welche besser ist, was wäre eine effektive Implementierung dafür?
(es kann auch sein das 2 Einträge den gleichen Platz haben, deshalb kann man leider nicht einfach nach Arraykeys sortieren...
Wie kann man so etwas effektiv implementieren, es dürfte alles auf eine zweistufige for-Schleife hinauslaufen, aber ich brings ned ganz zusammen nen Code zu schreiben der es schafft sie richtig zu sortieren, wie kann ich das denn machen, das der Platz dann im Array dazugespeichert wird?
lg
Mario
Hello,
Dafür hab ich eine Funktion die 2 Einträge vergleicht und sagt welche besser ist, was wäre eine effektive Implementierung dafür?
Oh wie glücklich ist der, der nichts weiß - wer Informatik studiert oder in der Schule hat, wird mit den Sortieralgorithmen in so ziemlich allen Varianten gequält. Einen guten Einstiegspunkt zum Thema "effektiv" bietet dir die Wikipedia
MfG
Rouven
Hi!
Oh wie glücklich ist der, der nichts weiß - wer Informatik studiert oder in der Schule hat, wird mit den Sortieralgorithmen in so ziemlich allen Varianten gequält. Einen guten Einstiegspunkt zum Thema "effektiv" bietet dir die Wikipedia
oh wie glücklich ist der, der genau lesen kann ;)
Ja, die Bäume und das ganze Zeugs hab ich auch alles gemacht, genauso gut weiß ich wie man Worst-, Best- und Average-Case Analysen macht, das hilft mir aber nicht wirklich bei meinem Problem, da ich die Reihenfolge ja nicht nur erstellen will, wie bei Mergesort, Quicksort und allen anderen an die ich mich nch so erinnern kann, sondern ich möchte auch mitspeichern ob der Nachbar den gleichen Platz hat oder einen anderen.
=> 1. Element ist Platz eins, is das zweite jetzt auch Platz 1 oder Platz 2?
lg
Mario
Hi,
Wie kann man so etwas effektiv implementieren, es dürfte alles auf eine zweistufige for-Schleife hinauslaufen
Nein, ich würde eher sagen auf usort plus selbstgeschriebene Vergleichsfunktion.
MfG ChrisB
das problem is das usort alleine auch ned reicht, da müsste usort ausführen UND dann nochmal eine for-Schleife, die die Plätze eintraget (nach usort weiß ich ned ob nach dem 2. Platz noch ein weiterer 2. Platz oder ein dritter kommt....
lg
Mario
Hi,
das problem is das usort alleine auch ned reicht, da müsste usort ausführen UND dann nochmal eine for-Schleife, die die Plätze eintraget (nach usort weiß ich ned ob nach dem 2. Platz noch ein weiterer 2. Platz oder ein dritter kommt....
Eine Schleife wirst du doch sowieso brauchen, wenn du das ganze ausgeben willst ... die kann auch die Plätze ermitteln. Oder brauchst du den Platz noch für irgendwas anderes?
MfG ChrisB
Nö, ich brauch keine Schleife mehr, aufgeben du ich das ganze per json_encode(), die Daten werden dynamisch per AJAX angefordert...
Hast du noch ne Idee wie man diesen Code verbessern kann, oder soll ich ihn so nehmen!?
<?php
usort($entries, "compare_entries");
$count = count($entries);
$entries['0']['place'] = 1;
for($x=0; $x<$count-1; $x++) {
if(compare_entries($entries[$x], $entries[$x+1])==0) {
// second array has the same place
$entries[$x+1]['place'] = $entries[$x]['place'];
} else {
// second is less effective
$entries[$x+1]['place'] = $entries[$x]['place']+1;
}
}
?>
lg
Mario
Hello,
Ich hab ein Array mit Einträgen, die ich gerne nach Plätzen ordnen würde.
Dafür hab ich eine Funktion die 2 Einträge vergleicht und sagt welche besser ist, was wäre eine effektive Implementierung dafür?
(es kann auch sein das 2 Einträge den gleichen Platz haben, deshalb kann man leider nicht einfach nach Arraykeys sortieren...
Wieso willst Du denn nun nach Index sortieren, wenn Du doch eben noch von Einträgen, also mMn Werten gesprochen hast. Sortiere das Array doch einfach nach Werten.
eine der interessanten Sortierfunktionen ist z.B. natsort()
http://de3.php.net/manual/en/function.natsort.php
Es gibt aber noch ein paar mehr in PHP.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Naja, ich möchte Sie mit Hilfe von einer komplexeren Formel vergleichen, die Daten jedoch keinen absoluten Wert liefert, sondern immer nur sagt welcher der zwei übergebenen Arrays besser ist....
lg
Mario