Autocomplete Problem
Franz. Z.
- php
Hi,
ich hab mir ein Ajax-Autocomplte Script herunter geladen. Funktioniert auch sehr gut, einziger Schönheitsfehler ist, dass es alle Elemente der Ergebnismenge nur vom ersten bis zum n-ten Buchstaben mit der Eingabe vergleicht.
Dafür zuständig ist folgender Teil:
if ($len)
{
for ($i=0;$i<count($aUsers);$i++)
{
// had to use utf_decode, here
// not necessary if the results are coming from mysql
//
if (strtolower(substr(utf8_decode($aUsers[$i]),0,$len)) == $input)
$aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
//if (stripos(utf8_decode($aUsers[$i]), $input) !== false)
// $aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
}
}
Wie kann ich den ändern, damit es egal ist, an welcher Stelle die eigegebene Buchstabenkombination mit der Ergebnissmenge übereinstimmen darf und es dann dennoch angezeigt wird?
Gruß, Franz
Hallo Franz,
Wenn ich das richtig sehe ist die Stelle um substr der relevante Part.
Gruß
Ole
(8-)>
Hallo Franz,
Wenn ich das richtig sehe ist die Stelle um substr der relevante Part.
Hi Ole,
das siehst Du richtig. Aber substr kann man ja nicht ohne Anfangswert benutzen, oder?
Grüße, Franz
Hallo Franz,
das siehst Du richtig. Aber substr kann man ja nicht ohne Anfangswert benutzen, oder?
Ich kenn mich mit PHP zwar nicht so aus, aber die Doku liest sich zumindest so. Um vom Anfangswert unabhängig zu sein sieht preg_match vielversprechend aus.
Gruß
Ole
(8-)>
Ich kenn mich mit PHP zwar nicht so aus, aber die Doku liest sich zumindest so. Um vom Anfangswert unabhängig zu sein sieht preg_match vielversprechend aus.
Hi Ole,
aber preg_match braucht sicher viel mehr Ressourchen als z.B. strpos.
Kann ich aber nicht belegen, ist nur ne Einschätzung.
Deshalb frag ich ja nach, welche der Optionen möglichst effizient arbeitet.
Grüße, Franz
»» Ich kenn mich mit PHP zwar nicht so aus, aber die Doku liest sich zumindest so. Um vom Anfangswert unabhängig zu sein sieht preg_match vielversprechend aus.
»»Hi Ole,
aber preg_match braucht sicher viel mehr Ressourchen als z.B. strpos.
Kann ich aber nicht belegen, ist nur ne Einschätzung.Deshalb frag ich ja nach, welche der Optionen möglichst effizient arbeitet.
Grüße, Franz
[Link:http://phpperformance.de/pruefen-ob-ein-string-eine-bestimmte-zeichenkette-enthaelt/]
Original: (funktioniert)
for ($i=0;$i<count($aUsers);$i++)
{
// had to use utf_decode, here
// not necessary if the results are coming from mysql
//
if (strtolower(substr(utf8_decode($aUsers[$i]),0,$len)) == $input)
$aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
//if (stripos(utf8_decode($aUsers[$i]), $input) !== false)
// $aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
}
}
"Fälschung": (funktioniert leider nicht)
for ($i=0;$i<count($aUsers);$i++)
{
// had to use utf_decode, here
// not necessary if the results are coming from mysql
//
$aUsers[$i]=utf8_decode($aUsers[$i]);
$aUsers[$i]=strtolower($aUsers[$i]);
if (strpos($aUsers[$i],$input) !==false) {
$aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
}
}
"Fälschung": (funktioniert leider nicht)
Tut sie, wenn allle geschweiften Klammern stimmig sind ;-)
if (strtolower(strpos(utf8_decode($aUsers[$i]),$input)) !== false) {
$aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
}
if (strtolower(substr(utf8_decode($aUsers[$i]),0,$len)) == $input)
$aResults[] = array( "id"=>($i+1) ,"value"=>htmlspecialchars($aUsers[$i]), "info"=>htmlspecialchars($aInfo[$i]) );
Warum ergibt die untere Abfrage ein stimmiges Ergebnis und die obere wirft mir praktisch alle db-Einträge aus, egal ob sie passen oder nicht??
Moin!
Warum ergibt die untere Abfrage ein stimmiges Ergebnis und die obere wirft mir praktisch alle db-Einträge aus, egal ob sie passen oder nicht??
Weil strtolower() nun mal Strings zurückgibt, keine typechten Booleans:
Wenn du deinen Code mal drastisch kürzt:
if (strtolower(...) !== false) {
if (strtolower(...) == $input) {
- Sven Rautenberg
Wenn du deinen Code mal drastisch kürzt:
»» [code lang=php]
»» if (strtolower(...) !== false) {
»» if (strtolower(...) == $input) {
Jups. Dann seh ichs auch :-)
Danke an Dich!
Franz
Wie kann ich den ändern, damit es egal ist, an welcher Stelle die eigegebene Buchstabenkombination mit der Ergebnissmenge übereinstimmen darf und es dann dennoch angezeigt wird?
Gruß, Franz
Ich meine natürlich, welche der vorhandenen Möglichkeiten, zu überprüfen, ob der Teilstring im String vorhande ist, geht am schnellsten bzw. kostet die wenigsten Ressourcen??
Hatte mich da etwas missverständlich ausgedrückt, sorry.
Grüße