Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyniki szukania.
Forum PHP.pl > Forum > PHP
moto0095
Witam. Szukałem w google jak by co winksmiley.jpg
A więc zrobiłem sobie ostatnio skrypt wyszukiwarki, która przeszukuje plik tekstowy o treści:
Adres do pliku | tytuł | opis

Wyniki wyświetlają się w postaci:
<a href="adres do pliku">tytuł</a> <br> opis

Wyszukiwarka ta przeszukuje tylko opis.
I mam takie pytanko : Jak wyświetlić wyniki szukania w taki sposób:
... słowo słowo szukane-słowo słowo słowo ... questionmark.gif

P.s. Jeżeli były już takie tematy to dajcie linka winksmiley.jpg
tehaha
a nie możesz zrobić tego zwykłym str_replace() ?
moto0095
Ale ta funkcja służy do podmieniania ciągu znaków, więc co mi to da questionmark.gif
tehaha
no z tego co zrozumiałem to chcesz pogrubić szukane słowo w tekście więc tą funkcją podmienisz szukane-słowo na <b>szukane-słowo</b>
moto0095
nie, chodzi mi o te słowa za i przed szukanym wyrazem winksmiley.jpg
Chciałbym aby przed i po szukanym wyrazie wyświetlały się 3 słowa sąsiadujące winksmiley.jpg

Bo pogrubienie sam sobie zrobiłem winksmiley.jpg
tehaha
to może zapisz tekst do tablicy rozbijając go na spacjach funkcją implode(), potem funkcją array_search() lub array_keys() pobierzesz klucz/klucze dla tego słowa i wyświetlisz dodatkowo 3 wartości za tym kluczem i przed, ale trzeba by jeszcze uwzględnić jakoś znaki specjalne żeby nie były liczone jako słowa
ave
  1. $tekst = 'chciałbym aby przed i po szukanym wyrazie wyświetlały się 3 słowa sąsiadujące';
  2. $szukane = 'wyrazie';
  3. echo preg_replace('/(([^ ]* )?'.$szukane.'( [^ ]*)?)/','<b>$1</b>',$tekst );
moto0095
Zrobiłem tak jak radził kolega wyżej i wyświetliło się:
chciałbym aby przed i po szukanym wyrazie wyświetlały się 3 słowa sąsiadujące

wyświetlił się cały tekst a ja chciałbym aby wyniki wyświetlały się tak:
... jeden dwa trzy szukane jeden dwa trzy...
Wicepsik
  1. $wyraz = 'wyrazie';
  2.  
  3. $tekst = 'chciałbym aby przed i po szukanym wyrazie wyświetlały się 3 słowa sąsiadujące';
  4. $t = explode(' ', $tekst);
  5. $k = array_search($wyraz, $t);
  6.  
  7. for($i=-3; $i<4; $i++){
  8. echo $t[$k+$i].'<br/>';
  9. }
moto0095
Wielkie dzięki Wicepsik winksmiley.jpg

Witam ponownie.
Teraz mam taki problem skrypt podany przez Wicepsik'a połączyć z tym:
  1. $plik = "dane.txt";
  2. $dane = file($plik);
  3.  
  4. if ((isset($_POST['szuk'])) AND (trim($_POST['szuk']) != "")) {
  5.  
  6. echo "Szukane słowo: <b>".$search."</b><br /><br />";
  7.  
  8. for($i=0;$i<count($dane);$i++) /* przeszukuję tablicę */
  9. list($adres[$i], $tytul[$i], $text[$i]) = explode(" | ", $dane[$i]);
  10.  
  11. for($i=0;$i<count($text);$i++)
  12. if (strpos($text[$i],$_POST['szuk']) !== false)
  13.  
  14. echo "<a href='".$adres[$i]."'>".$tytul[$i]."</a><br />".$text[$i]."<br />";
  15. }
  16.  



questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif
Wicepsik
  1. if ((isset($_POST['szuk'])) AND (trim($_POST['szuk']) != "")) {
  2.  
  3. echo "Szukane słowo: <b>".$search."</b><br /><br />";
  4.  
  5. for($i=0;$i<count($dane);$i++) /* przeszukuję tablicę */
  6. list($adres[$i], $tytul[$i], $text[$i]) = explode(" | ", $dane[$i]);
  7.  
  8. for($i=0;$i<count($text);$i++)
  9. if (strpos($text[$i],$_POST['szuk']) !== false)
  10.  
  11. $t = explode(' ', $text[$i]);
  12. $k = array_search($_POST['szuk'], $t);
  13.  
  14. for($i=-3; $i<4; $i++){
  15. echo $t[$k+$i].'<br/>';
  16.  
  17. }
  18.  
  19.  
  20. echo "<a href='".$adres[$i]."'>".$tytul[$i]."</a><br />".$text[$i]."<br />";
  21. }
moto0095
Coś to nie za bardzo działa
chodzi mi o to aby wyświetlało się tak
<a href="$adres">Tytuł</a></br>
... jeden dwa trzy szukane jeden dwa trzy ...


questionmark.gifquestionmark.gif

Okey, poradziłem sobie:
  1. $plik = "dane.txt";
  2. $dane = file($plik);
  3.  
  4. if ((isset($_POST['szuk'])) AND (trim($_POST['szuk']) != "")) {
  5.  
  6. echo "Szukane słowo: <b>".$search."</b><br /><br />";
  7.  
  8. for($i=0;$i<count($dane);$i++){ /* przeszukuję tablicę */
  9. list($adres[$i], $tytul[$i], $text[$i]) = explode(" | ", $dane[$i]);
  10. }
  11. for($i=0;$i<count($text);$i++){
  12.  
  13.  
  14. $wyraz = $_POST['szuk'];
  15. $tekst = $text[$i];
  16. $t = explode(' ', $tekst);
  17. $k = array_search($wyraz, $t);
  18.  
  19.  
  20. if (strpos($text[$i],$_POST['szuk']) !== false){
  21. echo "<a href='".$adres[$i]."'>".$tytul[$i]."</a><br />";
  22. for($j=-3; $j<4; $j++){
  23. echo "".search_highlight($t[$k+$j], $search)." ";
  24. }
  25. echo "<br />";
  26. }
  27. }
  28. }


plik dane.txt wygląda tak:
  1. index.php | Strona 1 | strona bardzo mila i bardzo ladna i bardzo nie brzydka i bardzo fajna
  2. index2.php | Strona 2 | strona bardzo nie mila i bardzo nie ladna i bardzo brzydka i bardzo nie fajna



i jak wpiszę np. słowo bardzo to wyświetli się:
  1. Strona 1
  2. strona bardzo mila i bardzo
  3. Strona 2
  4. strona bardzo nie mila i


a jak zrobić ,żeby wyświetlało się tak
  1. Strona 1
  2. strona bardzo mila... i bardzo ladna... i bardzo nie brzydka... i bardzo fajna...


questionmark.gif

questionmark.gif

Po prostu jak zrobić tak aby wyświetlało te 3 słowa sąsiadują ce ale do każdego znalezionego słowa questionmark.gifquestionmark.gifquestionmark.gif
tehaha
napisałem Ci kilka postów wyżej, użyj array_keys() , wtedy będziesz miał zwrócone wszystkie klucze szukanego słowa w rozbitym ciągu, następnie to wyświetlanie zrób w pętli
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.