Есть ли какая-либо функция PHP для решения совпадений значений массива в другой строке значения массива с учетом без учета регистра? - PullRequest
1 голос
/ 18 апреля 2019

Я создаю поиск по словам, но я хочу ранжировать их на основе наибольшего количества поисковых запросов.Я пытаюсь выполнить поиск, если ключ массива 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.

1 Ответ

0 голосов
/ 18 апреля 2019

Решено, что работает отлично для людей, которым может понадобиться дальнейшая помощь в чем-то подобном https://3v4l.org/tlvbh.

Я исправил проблему с помощью array-uintersect - который может принимать функцию в качестве аргумента для сравнения. Я отправляю это strcasecmp - чтобы избежать чувствительности к регистру при сравнении строк.

Это моя новая функция сортировки:

function sort_most_exists_asc($array, $str) {
    usort($array, function ($a, $b) use ($str) {
        $aa = count(array_uintersect(explode(" ", $str), explode(" ", $a['title']), 'strcasecmp'));
        $bb = count(array_uintersect(explode(" ", $str), explode(" ", $b['title']), 'strcasecmp'));
        return $bb - $aa;
    });
    return $array;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...