@EvgenyJozef3000

Как обновлять массив данных по мере завершения циклов в коде PHP?

Добрый вечер. Имеется следующий код работы с API 1C-Bitrix, а точнее работа с инфоблоками: https://pastebin.com/nX6cMJK6
Суть этого кода - перебираем товары из 3-х инфоблоков [ELKO, Treolan и OCS], объединяем их в единый инфоблок [Market]. В каждом из циклов добавляем товар, если его нет в системе (строка - 115), иначе обновляем свойства товара (строка - 118), строки кода предоставил для перебора товаров инфоблока ELKO, остальные циклы практически одинаковые. Свойства товаров записаны в переменную $arLoadProductArray.
Перейдём плавно к моей проблеме. Обратим внимание на самодельную функцию searchElementArr и переменные $articul и $search_id. Именно они используются в условии и функции searchElementArr. Более конкретно - я ранее говорил, что на строке 115 (для ELKO) мы добавляем товаров в случае, если его нет в системе, чтобы это проверить, мы обращаемся к переменной $search_id, которая является вызовом функции searchElementArr - она ищет id товара в системе Bitrix по следующим параметрами ("КОД_СВОЙСТВА_ПО_КОТОРОМУ_ИЩЕМ", "ЗНАЧЕНИЕ_СВОЙСТВА", "МАССИВ_ГДЕ_ИЩЕМ"). Во всех циклах кодом свойства, в котором ищем, является "65", значение свойства - артикул, который в зависимости от цикла (инфоблока) меняется, то бишь артикул берётся из того или иного инфоблока (который перебираем) и наконец массивом, где ищем эти артикулы, является $marketArr - выборка всех товаров из инфоблока Market. Запрос на выборку элементов в моём коде происходит один раз (строка - 52). При этом в каждом цикле у меня идёт добавление товаров и по идее нужно обновлять каждый раз массив $marketArr (делать запрос на выборку), чтобы производить корректно поиск в нём артикулов (так как мы не знаем данных о новодобавленных товарах, потому что массив статичный), но проблема в том, что при каждом запросе на выборку идёт запрос в базу данных, чтобы получить заветные элементы из инфоблока.
Я решил, что не стоит вставлять в каждый цикл foreach запрос на выборку элементов, а лучше всего будет поставить после завершения каждого цикла обновление массива $marketArr (запрос на выборку), чтобы при новом цикле мы знали какие товары добавились ранее.
Теперь вопрос к вам - чтобы вы сделали в моей ситуации, использовали мой метод (обновление массива после завершения каждого цикла) или какой-то ваш метод? Подскажите пожалуйста, что лучше сделать?
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
Во-первых, четыре одинаковых цикла не имеют смысла - их стоит объединить в один вложенный, прописав таблично отличия в полях формируемого объекта.
Во-вторых, я бы собирал в цикле изменения и дополнения для БД, а уже потом их вносил - просто чтобы не делать Update одного и того же элемента четырежды, как может произойти у вас.
Ну, и если вам так нужен поиск по артикулу - так собирайте данные в массив, ключи которого - те самые артикулы, поиск сильно облегчится ;)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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