Chernichko
@Chernichko
Учусь.

Как ускорить поиск элементов по двумерному массиву?

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

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

У меня это примерно так

$word = $_GET['name'];
  $newCities=array();
if(!empty($word)){
  foreach ($arCityList as $cCity) {
      //$cCity['cityName'] = iconv('windows-1251','utf-8',$cCity['cityName']);
        if(preg_match('/^'.$word.'/i', $cCity['cityName'])){
          $array1=array();
          $array1['cityId']=$cCity['cityId'];
          $array1['cityName']=$cCity['cityName'];
          $newCities[]=$array1;
        }
  }
}


но это очень долго работает.

Как можно ускорить поиск?
В данном примере я работаю с плагином ui-query autocmplete.
И этот autocmplete очень долго ищет подходящие города(
  • Вопрос задан
  • 295 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Поскольку поиск идёт по началу слова, то:
1. Используйте не список, а предварительно отсортированный массив и ищите бинарным поиском.
2. Используйте хэш. Даже разбиение по первой букве даст в русском языке сокращение перебора раз в 20.
Ответ написан
romy4
@romy4
Exception handler
1. список можно заранее подготовить как указал Rsa97 и сложить в отдельном файле
2. используйте разбиение по 1, 2 и 3 букве.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы