Исходя из вашего описания, если пользователь вводит несколько слов, вы хотите, чтобы он показывал результаты для каждого из поисков для каждого из этих слов.Например, если пользователь вводит «горячий воздух», результаты будут включать все результаты для «горячего воздуха» и все результаты для «горячего воздуха».
Рассмотрим следующий пример.
$(function() {
var availableTags = [
"win the day",
"win the heart of",
"win the heart of someone"
];
$("#tags").autocomplete({
source: function(req, resp) {
// Trim Query and split by " " (Space)
var srchTerms = req.term.trim().split(" ");
// Prepare result Arrays
var results = [],
uniqueResults = [];
// Iterate each search term and combine the results into one array
$.each(srchTerms, function(i, t) {
results = results.concat($.ui.autocomplete.filter(availableTags, t));
});
// Remove duplicates by iterating each result item
$.each(results, function(i, r) {
if ($.inArray(r, uniqueResults) === -1) uniqueResults.push(r);
});
// Send back to Autocomplete
resp(uniqueResults);
}
});
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="demo">
<div class="ui-widget">
<label for="tags">Multi-word search: </label>
<input id="tags">
</div>
</div>
Если пользователь введет «win» или «win», он все равно попадет в исходные данные.Если пользователь вводит «win heart», он фильтрует исходные данные для обоих терминов по отдельности, объединяя все результаты в один массив.Там, скорее всего, будут дубликаты.На этих этапах мы можем отфильтровать эти дубликаты и отправить полученный массив обратно.
В вашем коде вы захотите отправлять каждый поисковый запрос в PHP, который должен возвращать массив или массив объектов.Таким же образом вы соберете все результаты в один массив и затем отфильтруете.
В качестве альтернативы вы можете выполнить всю работу на стороне PHP, отправить весь кусок в PHP и заставить его выполнять поиск ифильтрация (возможно, быстрее) и возврат всех результатов.
Обновление
Если все, что вы хотите сделать, это получить массив через ajax, просмотрите следующее:
function (request, response) {
$.getJSON("autocomplete.php", {term: request.term}, function(data){
var matchArray = [];
$.each(data, function(key, val){
matchArray.push(val);
});
var srchTerms = $.trim(request.term).split(/\s+/);
$.each (srchTerms, function (J, term) {
var regX = new RegExp (term, "i");
matchArray = $.map (matchArray, function (item) {
return (regX.test(item) ? item : null);
});
});
response (matchArray);
});
}
Предполагается, что PHP вернет данные JSON, представляющие собой массив результатов.Поскольку вы не предоставили ни пример результатов, ни фрагмент своего PHP, трудно помочь в дальнейшем.
Надеюсь, это поможет.