ОсновноеRadiotalkПользовательское
Программирование
6   •   Посмотреть все темы

do-while

 

4875
ValdeZ @ValdeZ
По мере изучения PHP дошёл до такого дела как циклы.
С while и for разобрался, дошла очередь до do-while. Так и не вышло вникнуть. Суть понял, а на практике применить не могу.
Прошу предоставить какие-либо примеры работы цикла. Хоть, как пишет Котеров, в веб-программировании данный цикл редко используется, но не хочу что-то упустить.
Пример с оф. документации не нужен, там есть один, но не совсем то что хотелось бы увидеть.

Ещё хочу узнать, влияет ли использование альтернативного синтаксиса на скорость выполнения?
Я имею введу, будет ли быстрее работать цикл типа
for (...):
...
endfor;

чем
for (...){
...
}

А ещё, можно ли в универсальном цикле for делать условия внутри определения цикла?
типа:
for (..., if(){},...){}
или это бред, и условия ставить до или в цикле?
(просто ради интереса спрашиваю)
--------------------
demon, я кстати разобрался с той штукой насчёт булева типа
var_dump((bool) ""); // false
echo var_dump((bool) ""); // false

там везде где надо false выдает, там глюк какой-то был, что ли 😀

Отредактировано ValdeZ - 23.03.2010
1130
Александр @WestSide
Пример do{}while() - выборка и показ данных из БД.
В таблице sotrydniks 3 поля - Имя(name), Фамилия(fam), Долженость(dol)

$query = mysql_query("SELECT * FROM `sotrydniks`");
$result = mysql_fetch_assoc($query);
echo "В нашей команде:";
do{
printf("Имя - %s \n<br /> Фамилия - %s \n<br /> Долженость - %s \n<br />\n<br />", $result['name'], $result['fam'], $result['dol']);
}
while($result = mysql_fetch_assoc($query));

То есть фактически написанно - выводи (printf) пока есть что выводить...)

2 вопрос не понял, никогда не видел такой конструкции...
3 вопрос - а зачем? что за изврат? если второй атрибут уже и есть само условие, можешь попробывать, думаю будет работать)

4875
ValdeZ @ValdeZ
1. Ну насчёт do-while, я так понял цикл будет работать снова и снова пока не достигнет того, что указано в while?
2. ********** , там для if, while, for, foreach, и switch. Альтернативный синтаксис называется.
3. Сам знаю что извращение, после того как написал, уже сам понял что такое не нужно вообще.
-----------
У меня кстати глюк был, что echo var_dump((bool) ""); всегда возвращало true, даже если там false 😁

********** - перевод на русский язык оф. документации по ПХП. Примерно половина переведена. Хорошая вещь 😀

Отредактировано ValdeZ - 24.03.2010
4875
ValdeZ @ValdeZ
Всё, отлично. С этим разобрался.
-----------
Осенью, на олимпиаде по программированию была такая задачка: найти сумму всех целых делителей заданного числа.
Ну типа для числа 10 это будут числа 1,2,5 и 10, по-этому ответ: 1+2+5+10 = 18.
Выучив три типа циклов, решил её тремя способами. Не оценишь ли? Может перемудрил что-то, или можно ещё проще сделать:

$result = $i = 0;
$count = 100;

while ($i < $count){
$i++;
if (is_integer($count / $i))
{
$result += $count / $i;
}
}
echo "Сумма всех целых делителей числа $count: " . $result . ".<br>\n";

$result = $i = 0;
$count = 100;

do
{
$i++;
if (is_integer($count / $i))
{
$result += $count / $i;
}
} while ($i < $count);

echo "Сумма всех целых делителей числа $count: " . $result . ".<br>\n";

for ($result = $i = 1, $count = 100; $i < $count; $i++)
{
if (is_integer($count / $i))
{
$result += $count / $i;
}
}
echo "Сумма всех целых делителей числа $count: " . $result . ".<br>\n";

Как оказалось, for рулит, всё что надо - уже указанно в теле конструкции. 😀
А скорость среди всех циклов и синтаксисов (я про альтернативный) - одинакова, потому что преобразовывается в конечном счёте в один и тот же код, просто синтаксический сахар.

Отредактировано ValdeZ - 24.03.2010
1130
Александр @WestSide
ValdeZ пишет:

Всё, отлично. С этим разобрался.
-----------
Осенью, на олимпиаде по программированию была такая задачка: найти сумму всех целых делителей заданного числа.
Ну типа для числа 10 это будут числа 1,2,5 и 10, по-этому ответ: 1+2+5+10 = 18.
Выучив три типа циклов, решил её тремя способами. Не оценишь ли? Может перемудрил что-то, или можно ещё проще сделать:

$result = $i = 0;
$count = 100;

while ($i < $count){
$i++;
if (is_integer($count / $i))
{
$result += $count / $i;
}
}
echo "Сумма всех целых делителей числа $count: " . $result . ".<br>\n";

$result = $i = 0;
$count = 100;

do
{
$i++;
if (is_integer($count / $i))
{
$result += $count / $i;
}
} while ($i < $count);

echo "Сумма всех целых делителей числа $count: " . $result . ".<br>\n";

for ($result = $i = 1, $count = 100; $i < $count; $i++)
{
if (is_integer($count / $i))
{
$result += $count / $i;
}
}
echo "Сумма всех целых делителей числа $count: " . $result . ".<br>\n";

Как оказалось, for рулит, всё что надо - уже указанно в теле конструкции. 😀
А скорость среди всех циклов и синтаксисов (я про альтернативный) - одинакова, потому что преобразовывается в конечном счёте в один и тот же код, просто синтаксический сахар.

Решая такую задачу, я бы тоже использовал for, и меньше коду и по красивей выглядит)