| Цитата |
|---|
| Вячеслав Довнар написал: |
| Код |
|---|
$vanna = 50; // количество запросов
$packet = 20; // количество в пакете
foreach ($tovars as $key => $good) {
$k++;
$batch = array_merge($batch,
array(
'find_good_'.$key => 'crm.product.list?'.http_build_query( // ключик по товару
array(
'sel ect' => array('ID','NAME','SECTION_ID','PROPERTY_190'), //выбираю нужные МНЕ поля
'filter' => array(
'PROPERTY_190' => $good['bitrix_custom_id'], // поле для поиска товара
)
)
),
'update_good_'.$key => 'crm.product.update?'.http_build_query(
array(
'id' => '$result[find_good_'.$key.'][0][ID]', // берем результат именно из ключика по товару
'fields' => array(
'NAME' => $good['name'], // обновляю имя
)
)
)
)
);
if ( ($k % $packet == 0) || ($k == count($tovars)) ) { // если набралось нужное количество запросов или же список подошел к концу
$btch = executeHook($queryUrl, array('cmd' => $batch)); // выполняем хук
}
if ($k % ($packet*$vanna) == 0) { // если ванна наполнена ждем 2 сек
sleep(2);
}
}
|
грубо говоря получается так, это не код, а как бы объяснение структуры массива.
$batch[1] => 'crm.product.list...'
$batch[2] => 'crm.product.update from batch_1...'
$batch[3] => 'crm.product.list...'
$batch[4] => 'crm.product.update fr om batch_3...'
все же быстрее в 3 раза получается, чем если каждый товар по отдельности, проверял на объеме в 50 тыс товаров.