Я натолкнулся на фрагмент кода, который проходит через метод, который выбирает результаты запроса (таблица содержит 130000 записей) и использует цикл do while для этого.
public function updateTestData()
{
$limit = 1000;
$offset = 0;
$processedCount = 1;
do {
$idList = $this->getActiveIds($limit, $offset);
if (array() === $idList) {
break;
}
$count = count($idList);
$this->getLogger()->log("Fetching $count ids from db..", Zend_Log::DEBUG);
foreach ($idList as $contactId) {
//doing few log things
$processedCount++;
}
$offset = $offset + $limit;
} while (true);
}
Это правильный способ сделать это? Или есть лучший способ написать этот метод, избегая бесконечного цикла do while?
Любая помощь будет принята с благодарностью.
Нет необходимости do-while
Вы можете просто использовать while
с методом в качестве вашего условия, так как он вернет ложное условие, когда массив пуст. Я бы сделал следующее:
$limit = 1000;
$offset = 0;
$processedCount = 1;
while ($idList = $this->getActiveIds($limit, $offset)) {
$processedCount += count($idList);
$offset += $limit;
}
Других решений пока нет …