Autor Zpráva
lionel messi
Profil
Zdravím,

programujem si v PHP a MySQL vyhľadávanie, ale jedným veľkým problémom je, že v DB mám uložený samozrejme celý text článku. Pri vypísaní výsledkov by som ho však potreboval orezať tak, aby sa zobrazilo povedzme len 10 slov pred/za vyhľadávaným slovom. Snažím sa zosmoliť nejaký regulár, kt. ale vôbec nefunguje a text neskráti:

<?php
$objekt = "slovo"; //vyhľadávané slovo
preg_replace ("~(.*)([^ ] ){10}(". $objekt .")( [^ ] ){10}(.*)~iU", "\\2\\3\\4", $text)
?>

Je toto vôbec možné pomocou regexp. urobiť, resp. ako by sa dal tento problém vyriešiť? Ďakujem veľmi pekne za odpoveď.
juriad
Profil
Toto se dělá trochu jinak: vezmi prvních přibližně 200 znaků, pak najdi poslední mezeru a vše za ní zahoď. Na počtu slov většinou nezáleží.


Nezkoušel jsem to, ale takto nějak:
$pozice = strpos($text, $slovo);
$end = max(strrpos($text, ' ', -($pozice + strlen($slovo) + 200)), $pozice + strlen($slovo));
$start = min(strpos($text, ' ', $pozice - 200), $pozice);
substr($text, $start, $end - $start);
lionel messi
Profil
juriad:
Ešte raz ďakujem, neskôr vyskúšam a dám vedieť.
juriad
Profil
Pozor na to, že min, max musíš naprogramovat sám, neboť se nepěkně chovají vůči FALSE, které může strpos a strrpos vrátit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0