Intereting Posts
Codeigniter не может загружать библиотеки Почему в C ++ избегаются обратные косые черты в строковых литералах? Использование .htaccess для установки подкаталога в качестве корневого каталога Ошибка PHP PCRE preg_replace 3 разных равны количество экземпляров в Opencart не работает Неустранимая ошибка: класс «Монго» не найден в xampp Найти в следующий раз бизнес открыт; расчет mysql часов iphone SDK: Загрузить изображение с iphone на сервер php, отправить пустой файл? (код примера кода внутри) Как изменить URL-адрес перенаправления по умолчанию фильтра Laravel 5 Auth? значения php одного массива для ключа другого массива CURLOPT_FILE, curl_multi_exec и fclose завиток активирован, но не отображается в phpinfo Можно ли сохранить прозрачность изображения PNG при использовании PHP GDlib imagecopyresampled? laravel не может выполнить запланированную команду, а очередь: периодически выполнять расписание выполнения ()

PHP получает массив поисковых терминов из строки

Есть ли простой способ проанализировать строку для поисковых запросов, включая отрицательные термины?

'this -that "the other thing" -"but not this" "-positive"' 

изменится на

 array( "positive" => array( "this", "the other thing", "-positive" ), "negative" => array( "that", "but not this" ) ) 

поэтому эти термины могут использоваться для поиска.

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

 // parse the query string $query = 'this -that "-that" "the other thing" -"but not this" '; preg_match_all('/-*"[^"]+"|\S+/', $query, $matches); // sort the terms $terms = array( 'positive' => array(), 'negative' => array(), ); foreach ($matches[0] as $match) { if ('-' == $match[0]) { $terms['negative'][] = trim(ltrim($match, '-'), '"'); } else { $terms['positive'][] = trim($match, '"'); } } print_r($terms); 

Вывод

 Array ( [positive] => Array ( [0] => this [1] => -that [2] => the other thing ) [negative] => Array ( [0] => that [1] => but not this ) ) 

Для тех, кто ищет то же самое, я создал суть для PHP и JavaScript

https://gist.github.com/UziTech/8877a79ebffe8b3de9a2

 function getSearchTerms($search) { $matches = null; preg_match_all("/-?\"[^\"]+\"|-?'[^']+'|\S+/", $search, $matches); // sort the terms $terms = [ "positive" => [], "negative" => [] ]; foreach ($matches[0] as $i => $match) { $negative = ("-" === $match[0]); if ($negative) { $match = substr($match, 1); } if (($match[0] === '"' && substr($match, -1) === '"') || ($match[0] === "'" && substr($match, -1) === "'")) { $match = substr($match, 1, strlen($match) - 2); } if ($negative) { $terms["negative"][] = $match; } else { $terms["positive"][] = $match; } } return $terms; }