Добрый вечер. Имеется следующий код работы с 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 (запрос на выборку), чтобы при новом цикле мы знали какие товары добавились ранее.
Теперь вопрос к вам - чтобы вы сделали в моей ситуации, использовали мой метод (обновление массива после завершения каждого цикла) или какой-то ваш метод? Подскажите пожалуйста, что лучше сделать?