Zum Inhalt springen

PHP Suche


Empfohlene Beiträge

Hallo,

ich programmiere im Moment eine Suche incl. Auto-/Livesuche mittels Ajax. Die PHP-Datei zum Suchen liest eine Reihe Textdateien ein und gibt jetzt speziell für die Livesuche Vorschläge aus, die den bisher eingegebenen String enthalten. Bei den Textdateien handelt es sich um News.

Nun zu meinem Problem:confused::

Das Skript funktioniert so weit, nur dass es, wenn im Text z.B. steht: "word)nocheinpaarBuchstaben", wird "word)nocheinpaarBuchstaben" ausgegeben, da ich bissher die Wörter trenne, indem ich per

explode(" ", $text);

die einzelnen Wörter trenne.

Ich bräuchte eine Lösung, die Wörter richtig zu trennen!

Ich bedanke mich schonmal für die hoffentlich zahlreichen Infos.:D

Mfg,

milkilord

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich wüsste jetzt nicht das es da eine Möglichkeit gibt. Weil man ja meistens eine Bedingung zum Trennen braucht also z.B. "Trenne nach dem 5. Buchstaben"...

also bei

explode()

(siehe function.explode) braucht man man nur

explode($trenner, $string [, $limit (maximale Anzahl der Trennungen)])

.

explode()

gibt einen Array zurück.

Beispiel:


print_r(explode("|", "foo|bar|abc");
/* returns: */
Array(3) {
0 => 'foo',
1 => 'bar',
2 => 'abc'
}
[/PHP]

Mein Problem ist nur, dass wenn ein Wort z.B. fooBar ist, ich aber nur foo bekommen möchte, nicht nach Leerzeichen ternnen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich glaube, wir reden gerade aneinander vorbei! Vlt. war fooBar auch ein schlechtes Beispiel.

Hier ein neuer Versuch:

$string = "dies ist ein String in dem ein Wort gesucht werden soll(test)"

Diesen String würde ich jetzt mittels


$string = "dies ist ein String in dem ein Wort gesucht werden soll(test)"
$woerter = explode(" "/*Leerzeichen*/, $string);
print_r($woerter);

/*
Ausgabe:
Array(11) {
0 => 'dies',
1 => 'ist',
2 => 'ein',
3 => 'String',
4 => in'',
5 => 'dem',
6 => 'ein',
7 => 'Wort',
8 => 'gesucht',
9 => 'werden',
10 => 'soll(test)'
}
*/
[/PHP]

Suche ich jetzt nach z.B. 'Wort' oder 'gesu', findet mein Skript es richtig. Suche ich aber nach 'soll', gibt er mit 'soll(test)' zurück. Und genau das will ich verhindern. Er soll mir nur 'soll' zurückgeben!

Ich hoffe es ist jetzt klarer geworden, was ich meine.:D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke, daran hatte ich auch schon gedacht, nur was mache ich, wenn nach den Sonderzeichen gesucht werden soll.

Eine andere Idee wäre, einfach beim Erstellen neuer News, "Tags" zu den News hinzuzufügen. Problem, ich muss für alle alten News Tags finden, oder sie von der Livesuche ausschließen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht könnte man versuchen eine entsprechende Funktion zu basteln. Wo quasi zuerst nach Sonderzeichen gesucht wird und dann ab dem Sonderzeichen bis zum nächsten Leerzeichen der Inhalt gelöscht wird. Aber wie man das nun genau macht, kann ich so auf die schnelle auch nicht sagen :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht könnte man es damit versuchen:

//Variable für Sonderzeichen definieren

$sonderzeichen = "("

//Im String nach dem Sonderzeichen suchen, in der Variable wird ab_sonderzeichen wird dann der String ab dem Sonderzeichen gespeichert

$ab_sonderzeichen = strstr($string, $sonderzeichen);

//Man ersetzt die Leerzeichen durch ; und setzt das Limit auf 1 der String nach dem 1. ; wird in einer Variable gespeichert

$textende = explode(";", $ab_sonderzeichen, 1);

Jetzt müsste man nur noch die ; durch Leerzeichen ersetzen und den String vor dem ( mit $textende zusammenfügen. Also ich weiß nicht ob es klappt aber evtl. könnte es klappen ;-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Lösungsvorschlag wäre:


function specialchars($text) {
$search = array ("'", "(", ")", "*",
"+", ",", "-", ".", ":", "?", "!", "@", "[", "\\", "]",
"‘", "’", "‚", "“", "â€", "„", "„", "“");
$search = " ";

for($i = 0; $i <= count($search); $i++) {
$text= str_replace($search[$i], $replace, $text);
}
return $text;
}
[/PHP]

Dann halt zuerst die Sonderzeichen entfernen und danach die Leerzeichen entfernen.

Ein anderer Lösungsvorschlag wäre frei nach PHP Example AJAX Live Search einfach den News beim Erstellen "Tags" zu geben und diese in einer zentralen XML-Datei zu speichern.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht könnte man es damit versuchen:

//Man ersetzt die Leerzeichen durch ; und setzt das Limit auf 1 der String nach dem 1. ; wird in einer Variable gespeichert

$textende = explode(";", $ab_sonderzeichen, 1);

Mit

explode()

(PHP: explode - Manual)

kannst du keine Zeichen ersetzten, sondern strings zwischen dem zu suchenden Zeichen suchen, den kompleten String an diesen Zeichen aufteilen, und diese Einzelstrings in einen Array schreiben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...