Как получить массив похожих текстов из исходного массива по ключевому слову — PHP

#php

#php

Вопрос:

Предположим, у меня есть ключевое Toy car слово и массив

 $source_array = array(
    'Provision for toy that is a car',
    'Toy that looks like a car',
    'Toy Car',
    'Toy CAR'
);
  

Я пытался, как

 foreach($source_array as $v) {
    echo similar_text($key_word, $v);
}
  

Он возвращает большее число для более высокого соответствия. Сначала мне нужен результат в массиве с более высоким совпадением.

Комментарии:

1. Что делает функция similar_text?

2. @jerkan прочитайте руководство

Ответ №1:

Вы можете сохранить результаты в массиве, ключом которого является предложение, а значением — оценка, затем получить максимальную оценку с соответствующими значениями :

 $source_array = array(
    'Provision for toy that is a car',
    'Toy that looks like a car',
    'Toy Car',
    'Toy CAR',
    'Toy car'  // <----- I added a "perfect" match
);

$key_word = 'Toy car';
$result = [];
foreach($source_array as $v) {
    $result[$v] = similar_text($key_word, $v);
}

$highest_score = max($result);  // <--------------------- Get max score
$sentences = array_keys($result, $highest_score); // <--- Get the keys corresponding to that value

var_dump($sentences);
  

Это выводит :

 array(2) {
  [0]=>
  string(25) "Toy that looks like a car"
  [1]=>
  string(7) "Toy car"
}
  

Если все, что вам нужно, это сортировать результаты по наибольшему совпадению, вы можете использовать arsort()

 $source_array = array(
    'Provision for toy that is a car',
    'Toy that looks like a car',
    'Toy Car',
    'Toy CAR',
    'Toy car'  // <----- I added a "perfect" match
);

$key_word = 'Toy car';
$result = [];
foreach($source_array as $v) {
    $result[$v] = similar_text($key_word, $v);
}

arsort($result);

var_dump($result);
  

 array(5) {
  ["Toy that looks like a car"]=>
  int(7)
  ["Toy car"]=>
  int(7)
  ["Provision for toy that is a car"]=>
  int(6)
  ["Toy Car"]=>
  int(6)
  ["Toy CAR"]=>
  int(4)
}
  

Комментарии:

1. Спасибо, поскольку я уже спрашивал, нужно ли мне все совпадения, которые я могу использовать $highest_score = krsort($result);