Поисковая система - до строки и после

А есть что-то вроде этого. Это прекрасно работает, но я пробовал 2 часа, чтобы сократить результат поиска - 100 строк до $word и 100 после. Как я могу сделать это?

$word = $_POST["search"];

$sql_events = mysql_query("SELECT * FROM events WHERE event_title LIKE '%" . $word . "%' OR event_desc LIKE '%" . $word ."%'");

function highlightWords($content, $word){
    if(is_array($search)){
        foreach ( $search as $word ){
            $content = str_ireplace($word1, '<span>'.$word1.'</span>', $content);
        }
    } else {
        $content = str_ireplace($word, '<span>'.$word.'</span>', $content);     
    }
    return $content;
}
while($row = mysql_fetch_array($sql_events)){

    $content = $row["event_desc"];

    $result = highlightWords($content, $word);
    echo '<li>
            <H3><a href="">'.$row['event_title'].'</a></H3>
            <div class="text">'.$result .'...</div>
         </li>';
}

2 ответа

Решение
$wordpos1 = (mb_strpos($content, $word) - 100);
  if ($wordpos1 < 0){
    $wordpos1 = 0;
  } else {
    $wordpos1 = (mb_strpos($content, $word) - 100);
  }
  $wordpos2 = (mb_strpos($content, $word) + 400);

  $resText = mb_substr($content, $wordpos1, $wordpos2);

  $result = highlightWords($resText, $word);

И это работает для меня:)

Вам нужно это регулярное выражение:

[\d\D]{0,100}word[\d\D]{0,100}

куда word это главное слово:). Вот это реализовано с вашим кодом:

$content = $row["event_desc"];
$word_in_regexp = quotemeta($content);
preg_match("/[\d\D]{0,100}$word_in_regexp[\d\D]{0,100}/i", $content, $matches);
$content = $matches[0];

Мы используем quotemeta() в случае $content содержит символы, такие как [, (, \ и т.п.

Другие вопросы по тегам