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

Я создаю поиск по словам, но я хочу ранжировать их на основе наибольшего количества поисковых запросов.Как я могу решить эту проблему?

Я пытаюсь выполнить поиск, если ключ массива 1 находится внутри длинной строки массива 2, а затем упорядочить массив по общему вхождению массива 1 в массив 2. 2. 1003 *

Удар - мой код

$str = "Hello World January Jude";
$arr1 = ["Hello World January Jude Lol Love","Hello Lol Loop","Love Life Jude","Crude Flash Hello"];
$str = explode(" ", $str);
echo sort_base($arr1, $str);
function sort_base($arr, $str){
$count = "";
foreach ($arr as $valuer){
    foreach ($str as $value){
    //$list[] = strpos($valuer, $value, 0);
    $count .= strpos($valuer, $value, 0)."<hr/>"; 
}

}
$arr = trim($count," ");
 echo $arr;
}

Пример ввода:

$array = ["Say Hello","Hello World"," Hello World Cup Final","Hello Cup","Hello","World"]; 
$str = "Hello World Cup"; 

Желание вывода :

Массив в порядке:

  1. Hello World Cup
  2. Final Hello World
  3. Hello Cup
  4. Hello
  5. World
  6. Скажи привет

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Вы можете использовать array-intersect и count, чтобы получить числовое значение для похожих слов. Теперь вы можете использовать usort для сортировки по этому.

Примите во внимание следующее:

function sort_most_exists_asc($arr, $str) {
    usort($arr, function ($a, $b) use ($str) {
        $aa = count(array_intersect(explode(" ", $str), explode(" ", $a)));
        $bb = count(array_intersect(explode(" ", $str), explode(" ", $b)));
        return $bb - $aa;
    });
    return $arr;
}

$str = "Hello World January Jude";
$arr = ["Hello World January Jude Lol Love","Hello Lol Loop","Love Life Jude","Crude Flash Hello"];
$arr = sort_most_exists_asc($arr, $str);

Живой пример: 3v4l

Обратите внимание, это будет работать только для целых слов. Для сходства слов используйте расстояние Левенштейна - и сравните с этим в usort

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

Вы можете создать набор всех подходящих слов между каждой фразой и целевым списком слов.

foreach ($arr1 as $phrase) {
    $matches[] = array_intersect(str_word_count($phrase, 1), $str);
}

Этот массив совпадений может использоваться с array_multisort для изменения порядка исходного массива.

array_multisort($matches, SORT_DESC, $arr1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...