Xpoint
   [напомнить пароль]

Поиск в массиве

Метки: [без меток]
2013-07-25 10:39:24 [обр] Олег[досье]

Здравствуйте!
У меня есть массив с большим количеством параметров (ключ-значение). Около 25000.
В этом массиве я ищу определённые артикулы, которые в цикле выхватываю из загружаемого файла, содержащий около 15000-20000.
Делаю это с помощью array_search. Всё работает и быстро, если искать точное совпадение.

Но!
Значение у меня выглядит так Наименование1 Артикул1, а поиск нужно производить только по Артикул1. С помощью array_search этого уже не сделать.

Делаю так:

$products= array(
  1 => 'Наименование1 Артикул1',
  2 => 'Наименование2 Артикул2',
  ...
  25000 => 'Наименование25000 Артикул25000'
  );

function mySearch($item, $key)
{
  if(preg_match('/Артикул1/', $item))
  {
    echo 'Key: '.$key.', Item: '.$item.'<br>';
  }
}

array_walk($products,'mySearch');

Это работает, но очень долго!

Есть ли ещё какой-то метод поиска в массиве по частичному совпадению?

спустя 8 часов [обр] Jared(3/26)[досье]
спустя 13 часов [обр] Филипп Ткачев(20/112)[досье]

Олег[досье], судя по задаче у вас поиск артикулов. При загрузке из файла вы можете загрузить данные в массив в следующем виде:

$products = array(
 'Артикул25000' => 'Наименование1',
 ...
);

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

спустя 4 часа 40 минут [обр] Олег[досье]
Jared[досье], эта функция подходит для поиска в строке, но не в массиве. А написание своей функции с перебором внутри, видимо, так же будет долго обрабатываться.
Филипп Ткачев[досье], есть массив (ключ-значение). Значение состоит из названия товара и артикула. В цикле из отдельно взятого файла я достаю строку (артикул) и ищу его в массиве. Необходимо в значении найти артикул.
Артикул сложно отделить от названия, так как название может быть двойным (т.е. с пробелом), так же как артикул, иногда без пробела, а иногда в одном артикуле встречается 3 пробела.
спустя 15 часов [обр] Филипп Ткачев(20/112)[досье]
Насколько я знаю, артикул и наименование разделяются спец.символом табуляции, особенно, если вы разбираете прайс с товаром.
Артикул представляет собой определенную последовательность, описываемую маской. Достаточно собрать набор масок и можно искать артикулы почти в любом тексте.
Вы наверно не понимаете, почему я спрашиваю у вас про задачу, про входные данные. Неплохо бы выложить кусок прайса на любой файлообменник или в тот же dropbox.
спустя 19 часов [обр] Jared(3/26)[досье]
Олег[досье] strpos в данном случае заменяет вашу регулярку.
Powered by POEM™ Engine Copyright © 2002-2005