Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [solved] [PHP] Parę słów wstecz i parę słów w przód od wyszukiwanej frazy
Forum PHP.pl > Forum > PHP
leovandamon
Hi all!

Przechodząc od razu do sedna sprawy - piszę skrypt wyszukiwarki.
Mam już prawie wszystko gotowe, jednak próbuję uzyskać taki efekt:

Link z nazwą podstrony
...kawałek treści wyszukiwana fraza kawałek treści...
adres podstrony

I mam problem właśnie z tym "
kawałek treści". Jak zrobić, żeby wyświetlało powiedzmy, 40 znaków / 5 słów przed szukaną frazą i tak samo po niej?

Pozdrawiam,
Leo van Damon
jarmiar
hmmm, np możesz sobie wstawić explode na jakiś znak który często się powtarza
leovandamon
Zapomniałem dopisać. Najczęściej powtarza się spacja, jednak tablica z explodezawierałaby parę tysięcy elementów.
Próbowałem z strstr i stristr, jednak, gdy zgodnie z manualem dodawałem trzeci parametr, otrzymywałem błąd.
Moli
@jarmiar - Aleś wymyślił LOL.

Do ucinania tekstu służy funkcja substr(). Możesz obliczyć kolejność szukanego tekstu i na nim wyświetlić tekst wstecz i tekst po.
leovandamon
Sprawdzam...

Nie, wciąż to nie to. Opiszę to inaczej.
Mam zmienną $tresc zawierającą treść podstrony. Mam zmienną $query zawierającą tekstowe zapytanie usera.
Chcę znaleźć w zmiennej $tresc pierwsze wystąpienie $query, wyświetlić kilka słów przed nim i kilka po nim, przy czym pogrubić $query.
(Sorry, że nie napisałem tego na początku).
f1xer
  1. <?php
  2. $pozycja=strpos($tresc, $query); //zwraca int (pozycja $query w $tresc)
  3. $doWyswietlenia=substr($tresc,$pozycja-50,strlen($query)+100); // 50 znaków przed i 50 znaków po wystąpieniu $query
  4. $doWyswietlenia=str_replace($query, "<b>".$query."</b>",$doWyswietlenia); // pogrubi wystąpienie $query
  5. //i tutaj wyswietlenie zmiennej $doWyswietlenia.
  6. ?>


Pisane z głowy ale powinno zadziałać
leovandamon
Działa po drobnej modyfikacji (olśnienie happy.gif ) - nie strlen($query)+50, ale strlen($query)+100.

Kod
        $pozycja = strpos($tresc, $query);
        $tresc = substr($tresc,$pozycja-50,strlen($query)+100);
        $tresc = str_replace($query, '<b>'.$query.'</b>', $tresc);


Na początku wyświetlało tylko tekst sprzed $query. Zastanawiając się czemu i przeglądając jeszcze raz manual dowiedziałem się czemu.
Cytat
substr($s,$o,$l) - Funkcja zwraca podciąg ciągu $s, począwszy od indeksu $o, składający się z $l liter

A ja miałem to cały czas przed nosem, jak wół wypisane... Załamka...

No nic, dzięki serdeczne. Widać, że są na tym świecie ludzie, którzy chętnie pomogą innym...

EDIT:
O, zmieniłeś. ^^

Pozdrawiam,
Leo van Damon.
f1xer
skoro już to masz za sobą to polecam zmienić coś w tym kodzie biggrin.gif chodzi o te wielokropki, żeby je dodać a i zamias <b></b> zamień to na standard xhtml np: <span style='font-weight:bold;'> </span> tak chyba będzie lepiej
leovandamon
Na jakiś czas udostępniam obecną wersję projektu, do którego potrzebny był ten właśnie kod - http://bit.nightdream.kicks-ass.org:8080/.

I jeszcze raz, serdeczne dzięki.

Pozdrawiam,
Leo van Damon
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.