Задать вопрос
@Nikelamoc

Как оптимально сделать autocomplete из обычного массива?

День добрый, есть массив метров на 10 формата Артикул => Название товара

Что-то типа такого
$array = array (
   23417 => 'Тут какое-то название товара',
   23486 => 'Тут еще какое-то название товара',
);

Как наиболее правильно сделать поиск вхождения по нему для autocomplete ?

В голову приходит что-то типа такого , но будет ли это оптимальным вариантом ?
$array = array (
   23417 => 'Тут какое-то название товара',
   23486 => 'Тут еще какое-то название товара',
);
$query = "название";
foreach($array as $key => $value) {
if (strpos($value, $query) !== false) {
    $result_array[$key] = $value;
}
}
  • Вопрос задан
  • 164 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Stepik
    PHP (pro)
    2 недели
    Далее
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
А что, в базе хранить религия не позволяет? Ясно же что база шустрее по тексту искать будет, да еще и имея начальные символы строки.
Если для Вас "это не по-христиански" - есть мысли фигануть еще 2-3 дубля массивов, с ключами - первыми символами, а значениями - ключами исходного архива, изврат и треш конечно, но зато мгновенно и бесшумно имхо... Соответственно автокомплит начинать не с первой буквы, а скажем с 3, потом массив с ключами из 4 первых символов, а дальше уже полученный подмассив можно и по вашей схеме.
Ответ написан
Комментировать
Immortal_pony
@Immortal_pony Куратор тега PHP
Можно воспользоваться функцией array_filter.

Пример:
$array = array_filter($array, function($element) use ($query) {
    return (strpos($element, $query) !== false);
});
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы