Как заставить цикл do while работать правильно?

Рейтинг: 0Ответов: 1Опубликовано: 03.05.2015

Для получения информации по последним сделкам из amoCRM используется метод GET leads/list. Использую цикл do while. Если количество элементов в массиве, который мы получаем, меньше или больше 500, то цикл работает нормально и заканчивает работу, когда получен массив с последними сделками (от 1 до 499). Если же элементов в массиве 500, то цикл работает бесконечно, и не останавливается, хотя должен остановиться, так как в последнем полученном массиве количество элементов равно 0 ($count_leads). Как заставить цикл работать правильно?

$limit_offset = 0;

do
{

$link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/leads/list?limit_rows=500&limit_offset='.$limit_offset;
$curl=curl_init(); #Сохраняем дескриптор сеанса cURL
#Устанавливаем необходимые опции для сеанса cURL
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
curl_setopt($curl,CURLOPT_URL,$link);
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);

$out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
$code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
curl_close($curl);
CheckCurlResponse($code);
if($out)
{
$Response=json_decode($out,true);
$leads_list = $Response['response']['leads'];
}

$count_leads = count($leads_list);
$limit_offset = $limit_offset+500;

}
while ($count_leads == 500);

Ответы

▲ 1

Чудес не бывает. Если в условии написано $count_leads == 500 и цикл при этом работает бесконечно - значит, в переменной $count_leads и правда раз за разом оказывается 500.

Я понимаю, отладка php по шагам - дело не модное, но может, все-таки попробуете?