Ошибка в операторе while

Acabar

Новичок
Ошибка в операторе while

Здраствуйте уважаемые. У меня по этому коду особо нет вопросов. Я знаю где тут ошибка.
Просто решил поделиться небольшим опытом. Запостил именно на этот раздел форума потому что больше некуда.
Поясню данный фрагмент. Не хочу создавать лишний объект sql, поэтому решил сделать запрос, собрать данные в массив
и делать другие запросы в тоже время обрабатывая данные массива.
На моё удивление появилась ошибка: Iorrect table name ''
PHP:
$this->sql->query("SELECT modName FROM modules");
while($modNames[] = $this->sql->fetchAssoc());
foreach ($modNames as $value) {
	echo $value["modName"];
	$this->sql->query("SELECT *	FROM `" .  $value["modName"]  . "`");
	while($rows = $sql->fetchAssoc()) {
		echo $rows[$value["modName"] . "Name"];
	}			
}
Посидев 10 минут, тупо посмотрев в код, сделав пару отладок, я заметил что массив $modNames имеет на одно значение больше чем надо. И тут меня осинило: Ведь оператор while(statements) { code } будит выполнять code до тех пор пока statements не примет значение false. Всё правильно! Массив $modNames принял ещё одно лишнее значение false.
Решил проблему так:
PHP:
while($modNames[] = $this->sql->fetchAssoc());
array_pop($modNames);
Я запостил этот топик, так как за последний год это первая ошибка, которая меня очень удивила, хочу поделиться с другими.
Так же буду очень признателен, если посоветуете более оптимальный вариант этого фрагмента.
П.С. Просьба не спрашивать почему не хочу делать копию объекта sql. Просто не хочу и всё.
 

Wicked

Новичок
Acabar
Ведь оператор while(statements) { code } будит выполнять code до тех пор пока statements не примет значение false.
Я бы сказал, code будет выполняться до тех пор, пока statements не примет значение false. А сам statements будет выполняться еще и включая тот раз, когда statements == false в первый раз.

Я бы лучше написал так:
while($row = $this->sql->fetchAssoc()) {
$modNames[] = $row;
}
 

Acabar

Новичок
Wicked
Wicked спасибо, иногда до меня не доезжают самые простые вещи =]
а на счёт
------------
Я бы сказал, code будет выполняться до тех пор, пока statements не примет значение false. А statements - еще и включая тот раз, когда statements == false в первый раз.
------------
Да, переменная примет false, но code не будит выполняться!
 

Acabar

Новичок
ай, крч ниважно :) Интересно, есть ли ещё какие нибудь более оптимальные альтернативы?
 

Фанат

oncle terrible
Команда форума
способов ечть миллион. только это всё не альтернативы. а детский лепет.
альтернатива бывает, когда выбирают, что пить -водку или портвейн.
а когда выбирают, из чего пить - из чашки, или из стакана, то это называется не альтернатива.
Это называется "когда коту делать нечего, он гигиену наводит".
 
Сверху