Hallo,
ich weiß nicht, ob das in diesem Bereich gut aufgehoben ist, da es eigentlich um einen Algorithmus geht. Ich habe bisher nichts dazu gefunden, vielleicht habe ich auch nur nach dem falschen gesucht. Das Problem ist folgendes: Ich will Sphinx für eine Volltextsuche nutzen, die Ergebnisse sollen aber alphabetisch sortiert werden. Kurze Info: Sphinx unterstützt zur Sortierung nur sog. Attribute und die dürfen nur ganzzahlig sein. Jetzt versuche ich, einen Algorithmus zu finden, der numerisch die alphabetische Sortierung von Strings abbildet. Allerdings bin ich zu schlecht in Mathe, um prüfen zu können, ob das überhaupt geht.
Ich habe einen Ansatz, der allerdings nur funktioniert, wenn alle Strings die selbe Länge haben:
Diese Funktion geht alle Buchstaben eines Strings durch und multipliziert den Ord-Wert eines jeden Zeichens mit einer absteigenden Zahl * 10. So ist gewährleistet, dass die vorderen Zeichen stärker gewichtet sind, als die hinteren.
Das Problem tritt bei unterschiedlich langen Strings auf. Bsp.:
"b"
hat einen niedrigeren Wert als
"aaaaa",
was zu einer falschen Sortierung führen würde. Problematisch ist, dass ich vorher nicht weiß, wie lang der längste String ist.
Jetzt würde ich gerne wissen, ob mir jemand sagen kann, ob das rechnerisch überhaupt lösbar ist.
ich weiß nicht, ob das in diesem Bereich gut aufgehoben ist, da es eigentlich um einen Algorithmus geht. Ich habe bisher nichts dazu gefunden, vielleicht habe ich auch nur nach dem falschen gesucht. Das Problem ist folgendes: Ich will Sphinx für eine Volltextsuche nutzen, die Ergebnisse sollen aber alphabetisch sortiert werden. Kurze Info: Sphinx unterstützt zur Sortierung nur sog. Attribute und die dürfen nur ganzzahlig sein. Jetzt versuche ich, einen Algorithmus zu finden, der numerisch die alphabetische Sortierung von Strings abbildet. Allerdings bin ich zu schlecht in Mathe, um prüfen zu können, ob das überhaupt geht.
Ich habe einen Ansatz, der allerdings nur funktioniert, wenn alle Strings die selbe Länge haben:
PHP-Code:
function str2Ordinal($str) {
$length = mb_strlen($str, 'utf-8');
$sum = 0;
for ($i = 0; $i < $length; ++$i) {
$char = mb_substr($str, $i, $i + 1);
$value = ($length - $i)*10*ord($char);
$sum += $value;
}
return $sum;
}
Das Problem tritt bei unterschiedlich langen Strings auf. Bsp.:
"b"
hat einen niedrigeren Wert als
"aaaaa",
was zu einer falschen Sortierung führen würde. Problematisch ist, dass ich vorher nicht weiß, wie lang der längste String ist.
Jetzt würde ich gerne wissen, ob mir jemand sagen kann, ob das rechnerisch überhaupt lösbar ist.
Kommentar