Moin!
<?php
foreach ($gruppe_liste as $gruppe_searchexp)
{
$prozent = (1-levenshtein(strtolower($arr_searchexp), strtolower($gruppe_searchexp))/max(strlen($arr_searchexp), strlen($gruppe_searchexp))); #Zu wieviel % stimmt die jeweilige Gruppe ($gruppe_searchexp) mit dem eingegebenen Suchbegriff ($arr_searchexp) übereinif((levenshtein(strtolower($arr_searchexp),strtolower($gruppe_searchexp)) <= $focus) && $prozent >= 0.5) #Der lev.-Wert muss kleiner sein als ein vom Suchbegriff abhäniger Wert ($focus = strlen($suchbegriff ...), die Gruppe muss zu 50% mit dem Suchbegriff übereinstimmen
{
if(!array_key_exists($gruppe_searchexp,$words)) #Prüfen, ob das Wort schon exisitert
{
$word = str_replace('.-.',' ',$gruppe_searchexp);
$words[$word] = $prozent;
}
}
}
?>
>
> `$word`{:.language-php} sind dann meine Alternativen.
>
> Was ließe sich da vielleicht verbessern?
Du kannst die Laufzeit vermutlich halbieren, indem du die levenshtein-Funktion pro Parametersatz nur einmal aufrufst und deren Ergebnis speicherst.
Ansonsten kannst du die Laufzeit dieser Funktion nur verbessern, wenn du PHP verläßt.
Eine Alternative dazu wäre, die Ergebnisse der Funktion in Abhängigkeit von den Eingabeparametern zwischenzuspeichern, und diesen Zwischenspeicher zuerst zu durchsuchen. Das könnte möglicherweise schneller sein, als der Funktionsaufruf selbst, erfordert aber logischerweise entsprechend viel Speicherplatz.
> Und wegen dem count(). Dachte, dass das so in Ordnung ist; laut php.net: "count — Zählt die Elemente einer Variable oder Attribute eines Objekts"
Bei einem String kommt da immer 1 raus. count() ist nur sinnvoll für Arrays. Oder für Objekte in PHP 5, die das Interface "Countable" implementieren.
- Sven Rautenberg
--
"Love your nation - respect the others."