Как отсортировать многомерный массив с опцией поиска в PHP? - PullRequest
0 голосов
/ 01 июля 2019

Я создал окно поиска и при событии keyup извлекаю массив json_encoded из другого файла, но я столкнулся с проблемой.Например,Если я наберу «Мельбурн», то покажет «Восточный Мельбурн» и другие варианты перед точным совпадением.Сначала я хочу показать Мельбурн, а затем восточный Мельбурн, Западный Мельбурн и другие варианты.

Я хочу отсортировать его по точной строке поиска.

The current array is like:
$response[] = array("category"=>'cat_name',"label"=>'East Melbourne');
$response[] = array("category"=>'cat_name',"label"=>'Melbourne');

Output:
{category: "City", label: "East Melbourne", value: "East Melbourne"}
{category: "City", label: "Melbourne", value: "Melbourne"}

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

function searchForId ($ id, $ array) {foreach ($ array as $ key => $ val) {if ($ val ['label'] === $ id) {return $key;}} return null;} $ response [] = array ("category" => 'cat_name', "label" => 'East Melbourne'); $ response [] = array ("category" =>'cat_name', "label" => 'Melbourne'); $ response [] = array ("category" => 'cat_name', "label" => 'West Melbourne'); $ id = searchForId ('Melbourne',$ response); $ newArr [] = $ response [$ id]; unset ($ response [$ id]); $ newArr1 = array_merge ($ newArr, $ response); echo ""; print_r ($ newArr1); выход;

0 голосов
/ 01 июля 2019

Вы можете использовать функцию Php levenshtein , чтобы определить, насколько ваш поисковый термин похож на данную строку.Для каждого элемента в многомерном массиве вы можете рассчитать сходство, используя функцию Левенштейна.Сходство может быть сохранено в массиве вместе с исходной строкой.Затем массив можно отсортировать, чтобы получить отсортированные результаты поиска.Можно использовать следующий код:

function GetSortedSearchResults($options, $search_term) {

    $sorted_results = array();
    for ($count = 0; $count < count($options); $count++) {
        $similarity = levenshtein($options["label"], $search_term);
        $sorted_results[$similarity] = $options["label"];
    }

    ksort($sorted_results);

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