Да, это правильно.
Моя стратегия заключается в том, что я создаю массив отслеживания при загрузке своих пакетных запросов. Этот массив соотносит ключ для моего ассоциативного массива с порядком, в котором я разместил пакеты. Когда я зацикливаюсь на результатах, я использую счетчик, чтобы пройти через массив отслеживания и вытащить правильный индекс ассоциативного массива. Затем я использую это для обновления ассоциативного массива результатами этого этапа пакетной операции.
Было бы неплохо, если бы пакетная обработка поддерживала параметр 'name', и этот параметр возвращался с каждым ответом. Но это только работает, если вы используете имя для создания пакетных зависимостей:
https://developers.facebook.com/docs/reference/api/batch/
Загрузка партий:
foreach ($campaigns as $title => $campaign) {
if (count($batch) == 20) {
$batches[] = $batch;
$batch = array();
}
$titles[] = $title; #TRACKING array;
$body = http_build_query($campaign);
$body = urldecode($body);
$batch[] = array(
'method' => 'POST',
'relative_url' => "/act_{$act}/adcampaigns",
'body' => $body
);
}
Обработка партий:
if ($batch) {
$batches[] = $batch;
$counter = 0;
foreach ($batches as $batch) {
$params = array(
'access_token' => $access_token,
'batch' => json_encode($batch)
);
$responses = $facebook->api('/', 'POST', $params);
foreach ($responses as $response) {
$response = json_decode($response['body'], 1);
$campaign_id = $response['id'];
$title = $titles[$counter]; #RETRIEVING THE INDEX FROM THE TRACKING ARRAY
$campaigns[$title]['campaign_id'] = $campaign_id;
$counter++; #INCREMENTING THE COUNTER
}
}
}