Предположим, у меня есть массив, который находится ниже:
Array
(
[0] => Array
(
[name] => playstation sony 3 slim 320gb
)
[1] => Array
(
[name] => sony xperia acro s
)
[2] => Array
(
[name] => sony xperia tipo
)
[3] => Array
(
[name] => sony ericsson xperia arc s
)
[4] => Array
(
[name] => sony xperia go
)
[5] => Array
(
[name] => sony playstation 4
)
)
Теперь я хочу отфильтровать массив на основе значения поиска и отсортировать массив на основе наиболее релевантных (по кратчайшей).
Мои данные запроса:
$request = 'sony';
Я ожидаю следующих результатов:
Array
(
[0] => Array
(
[name] => sony xperia go
)
[1] => Array
(
[name] => sony xperia tipo
)
[2] => Array
(
[name] => sony playstation 4
)
[3] => Array
(
[name] => sony xperia sony acro ss
)
[4] => Array
(
[name] => sony ericsson xperia arc s
)
[5] => Array
(
[name] => playstation Sony 3 slim 320gb
)
)
Самый простой способ добиться фильтрации поиска в PHP - это фильтровать массив ( array_filter
) вашим пользовательским обратным вызовом, а затем сортировать его с помощью пользовательской функции сравнения ( usort
).
Вот простой код:
<?php
$data[]['name'] = 'foo';
$data[]['name'] = 'playstation sony 3 slim 320gb';
$data[]['name'] = 'sony xperia acro s';
$data[]['name'] = 'sony xperia tipo';
$data[]['name'] = 'sony ericsson xperia arc s';
$data[]['name'] = 'sony xperia go';
$data[]['name'] = 'sony playstation 4';
$data[]['name'] = 'bar';
$result = array_filter($data, function($v) { return stristr(current($v), 'sony'); });
usort($result, function($a, $b) { return strlen(current($a)) < strlen(current($b)) ? -1 : 1; });
print_r($result);
Обратите внимание, что PHP не является хорошим решением для реализации сложных требований к поиску. Поэтому для более ориентированных на поиск решений, пожалуйста, рассмотрите возможность использования:
которые могут быть легко интегрированы с PHP.