Зеркальная функциональность SQL как LIKE для массива PHP?

Сейчас у меня есть страница с AJAX-скриптом, который ищет в базе данных LIKE "% search term from input box%".

Мне нужно изменить его так, чтобы вместо поиска в базе данных он искал массив (который был составлен из двух таблиц - я не могу использовать JOIN, потому что в нем есть нечто большее).

Как мне создать нечеткую функцию поиска в PHP, которая будет возвращать все возможные совпадения из массива?

13.10.2009 10:56:16
2 ОТВЕТА
РЕШЕНИЕ

вы хотите preg_grep

например

$arr = array("tom jones", "tom smith", "bob jones", "jon smith");
$results = preg_grep("/jones/",$arr);

$resultsтеперь будет содержать два элемента, "tom jones"и"bob jones"

8
13.10.2009 11:06:14
Хорошее решение! Но $ results = preg_grep ("% jones%", $ arr); было бы немного больше, как;)
powtac 13.10.2009 11:21:08

Вы можете просто зациклить массив и использовать strpos, чтобы найти соответствующие элементы

foreach( $arr as $value ) {
   if ( strpos($value, 'searchterm') !== FALSE ) {
      // Match
   }
}

Вы можете использовать регулярное выражение для более сложного поиска, но strpos будет быстрее, если вы просто попытаетесь выполнить простой поиск типа LIKE '% term%'.

2
13.10.2009 11:07:56
однако это не будет рекурсивно перебирать многомерный массив.
Corey Ballou 13.10.2009 11:10:59
за исключением того, что не получится с подстановочными знаками в середине, например,% dav% d%
Jonathan Fingland 13.10.2009 11:11:30