Intereting Posts
Предупреждение Codeigniter PHP Symfony 2 Forms entity Тип поля Тип Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом, массив указан в Есть ли способ использования PHP-ActiveRecord в качестве уровня ORM / абстракции Symfony? Как создать массив вставки пакета Codeigniter как подсчитать посетителей сайта с помощью java-скрипта или php Как скопировать ArrayIterator, чтобы сохранить текущую позицию итерации? Ошибка «действующее ограничение open_basedir» Метод вызываемого конструктора для WP_Widget устарел с версии 4.3.0 Проблемы с Amazon ec2 linux Imagemagick FPDF, создайте PDF с помощью структуры заголовка таблицы уровня дерева с закругленными углами Когда действие формы действует на ту же страницу, сохраните позицию страницы? Обратное геокодирование с помощью API карт Google и PHP для получения ближайшего местоположения с использованием Lat, Long координат Как загружать ресурсы сайта независимо от пути родительского файла Резервное копирование веб-сайта в PHP?

Возвращать слова до и после первого вхождения строки

У меня есть текст, возвращенный из поискового запроса, и назовем его $ body. Теперь я хочу, чтобы скрипт нашел первое вхождение поискового запроса, $ query. Я знаю, что я могу найти это первое вхождение в этом случае с strripos.

После того, как я нашел, я хочу, чтобы сценарий возвращал пару слов до первого появления строки, а также несколько слов после окончания первого вхождения.

По сути, я пытаюсь сделать то, что Google делает с результатами поиска.

Любые идеи о том, где я должен начать? Моя проблема в том, что я продолжаю возвращать частичные слова.

Ты мог:

$words = explode(" ", $body); 

Создание массива всех слов в $ body.

 $index = array_search($query, $words); $string = $words[$index - 1]." ".$words[$index]." ".$words[$index + 1]; 

Но у вас возникнут проблемы, если запрос состоит из более чем одного слова.

explode – array_search

Мне кажется, что вы можете использовать strpos чтобы найти начало поискового термина и strlen чтобы получить его длину, что позволило бы вам …

  • Создайте один массив из начала текста в поисковый запрос, а затем отобразите последнее слово в этом массиве и,
  • Создайте второй массив из слов после strpos + strlen и покажите первое слово в этом массиве.

Или, если у вас уже есть несколько символов до и после поискового запроса, если вы взорвите их в массив, вы можете вытащить одно или два слова.

Я не знаю PHP, но если вы можете использовать регулярные выражения, вы можете использовать следующий:

 string query = "search"; int numberOfWords = 2; Regex( "([^ \t]+\s+){" + numberOfWords + "}\w*" + query + "\w*(\s+[^ \t]+){" + numberOfWords + "}" ); 

как насчет нескольких слов с обеих сторон:

 <?php $subject= "Four score and seven years ago, our forefathers brought forth upon this continent a new nation"; $pattern= "/(\w+\s){3}forth(\s\w+){3}/"; preg_match($pattern, $subject, $matches); echo("... $matches[0] ..."); 

дает:

 ... our forefathers brought forth upon this continent ...