Задать вопрос
@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;
}
}
  • Вопрос задан
  • 161 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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);
});
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽