|
|
|
| Недавно в этой - http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=50778&page=1 теме спрашивал по поводу подцветки слова в строке результата поиска. Спасибо, что помогли. Но встал другой вопрос, опять из серии "работа со строками". Может кто подскажет...
Допустим, искали текст (статью, например), в котором встречается слово "PHP". Нашлась статья в БД, в которой слово "PHP" встречается 3 раза. При помощи substr_count () вычисляю эту цифру - это элементарно, вопрос вот в чем - необходимо в результатах поиска вывести не весь найденный текст, а, допустим, всего 3 предложения, в которых одно содержит искомое слово. Например:
найден текст:
PHP - язык web-программирования. Данный язык очень похож на язык Cи. Этот язык имеет огромное количество функций, облегчающих разработку web-приложений. На данный момент именно на нем написано большенство web-сайтов интернета.
В результате поиска необходимо вывести, допустим, только первые 3 предложения, а не все 4 (в данном случае). Причем заранее, конечно, не известно, сколько предложений существуют ДО искомого слова ("РНР") и ПОСЛЕ. Можно, конечно, ограничиваться не предложениями, а словами, то есть, необходимо вывести ~10 слов ДО искомого слова ("РНР") и 10 слов ПОСЛЕ (можно ориентируясь пробелами). Ума не приложу, как такое реализовать... :( | |
|
|
|
|
|
|
|
для: vitroot
(17.03.2008 в 10:55)
| | понятно что в строке дело происходит , но непонятно есть в строке html или нет,
и с одной строки выводятся все отрезки с найденным или нет
вариантов масса
<pre><?
$txt = 'text text text text text text text text text text text text
text text text text text text php php text text text text text text
text text text text text text text text text text text text
text text text text text text text text text text php text text';
$blocks = 20; #столько байт желательно до и после
// строковыми функциями
$start = 0;
$result = array();
$len = strlen($txt);
while(($start = stripos($txt, 'php', $start)) !== false)
{
$in = (($start - $blocks) < 0) ?
0: strpos($txt, ' ', ($start - $blocks));# нахождение пробела до
$out = (($start + $blocks) > $len) ?
$len : strpos($txt, ' ', ($start + $blocks));# --//-- после
$result[] = substr($txt, $in, ($out-$in));
$start = $out;
}
print_r($result);
// и так
eregi('[[:<:]].{0,20}php.{0,20}[[:>:]]', $txt, $out);
print_r($out);
?></pre>
|
| |
|
|
|
|
|
|
|
для: exp
(18.03.2008 в 01:30)
| | ОГромное спасибо за ответ! Вот только не очень понял, как отсюда результат доставать из массива... | |
|
|
|
|
|
|
|
для: vitroot
(18.03.2008 в 09:33)
| | $out[индекс]
$out[0]
$out[1]
$out[2]
... | |
|
|
|