Я создаю поиск по словам, но я хочу ранжировать их на основе наибольшего количества поисковых запросов.Я пытаюсь выполнить поиск, если ключ массива 1 существует внутри длинной строки массива 2, а затем упорядочить массив по общему вхождению массива 1 в массив 2. 2. 1001
Пример ввода:
$arr = array(array("id" => 1,"title" => "Hello World", "body" => "Hi Jude All this is my content"),
array("id" => 2,"title" => "Hello World Boy", "body" => "Hi All this is my content Girl"),
array("id" => 3,"title" => "Hello Kids", "body" => "Hi All this is my content Kid"),
array("id" => 4,"title" => "Hello World Jude", "body" => "Hi All this is my content Jude"),
array("id" => 5,"title" => "Hello World Jude January", "body" => "Hi All this is my content Jan"),
array("id" => 6,"title" => "Hello World January June Lord", "body" => "Hi All this is my content Jan Jude Lord"));
$str = "Hello world January jude";
Выход желаний:
Массив в порядке:
Hello World Jude January
Hello World Jude
Hello World January June Lord
Hello World
Hello World Boy
Hello Kids
Ранее я писал вопрос, основанный на решении проблемы для Есть ли какие-либоФункция PHP для определения совпадений значений массива в другой строке значения массива? Впоследствии я получил решение по этому вопросу, но теперь моя главная проблема заключается в том, что он оценивает мою фильтрацию на основе чувствительности к регистру , если мое ключевое слово поискаhello world
и у меня есть Hello world
и hi world
, потому что мир на hi world
является строчным, так как тот, что находится в моих ключевых словах поиска, выбирает тот, который строчными, прежде чем рассматривать тот, у которого больше всего совпадений. Я попробовал несколько вещей.но я не смог его получить.
Примечание. Я хочу, чтобы вывод выводился так, как его нельзя вернуть в нижнем регистре.
Это то, что я пытался использовать в качестве примера ввода извыше:
$arr2 = sort_most_exists_asc($arr, $str);
var_dump($arr2);
function sort_most_exists_asc($array, $str) {
usort($array, function ($a, $b) use ($str) {
$aa = count(array_intersect(explode(" ", $str), explode(" ", $a['title'])));
$bb = count(array_intersect(explode(" ", $str), explode(" ", $b['title'])));
return $bb - $aa;
});
return $array;
}
Работал хорошо, если его форматирование точно так же, но я не хочу, чтобы он следовал чувствительности к регистру во время array_intersect.