Php цикл со счетчиком
for loops are the most complex loops in PHP. They behave like their C counterparts. The syntax of a for loop is:
for (expr1; expr2; expr3) statement
The first expression ( expr1 ) is evaluated (executed) once unconditionally at the beginning of the loop.
In the beginning of each iteration, expr2 is evaluated. If it evaluates to true , the loop continues and the nested statement(s) are executed. If it evaluates to false , the execution of the loop ends.
At the end of each iteration, expr3 is evaluated (executed).
Each of the expressions can be empty or contain multiple expressions separated by commas. In expr2 , all expressions separated by a comma are evaluated but the result is taken from the last part. expr2 being empty means the loop should be run indefinitely (PHP implicitly considers it as true , like C). This may not be as useless as you might think, since often you’d want to end the loop using a conditional break statement instead of using the for truth expression.
Consider the following examples. All of them display the numbers 1 through 10:
for ( $i = 1 ; ; $i ++) if ( $i > 10 ) break;
>
echo $i ;
>
Of course, the first example appears to be the nicest one (or perhaps the fourth), but you may find that being able to use empty expressions in for loops comes in handy in many occasions.
PHP also supports the alternate «colon syntax» for for loops.
for (expr1; expr2; expr3): statement . endfor;
It’s a common thing to many users to iterate through arrays like in the example below.
/*
* This is an array with some data we want to modify
* when running through the for loop.
*/
$people = array(
array( ‘name’ => ‘Kalle’ , ‘salt’ => 856412 ),
array( ‘name’ => ‘Pierre’ , ‘salt’ => 215863 )
);
?php
for( $i = 0 ; $i < count ( $people ); ++ $i ) $people [ $i ][ 'salt' ] = mt_rand ( 000000 , 999999 );
>
?>
The above code can be slow, because the array size is fetched on every iteration. Since the size never changes, the loop be easily optimized by using an intermediate variable to store the size instead of repeatedly calling count() :
$people = array(
array( ‘name’ => ‘Kalle’ , ‘salt’ => 856412 ),
array( ‘name’ => ‘Pierre’ , ‘salt’ => 215863 )
);
?php
for( $i = 0 , $size = count ( $people ); $i < $size ; ++ $i ) $people [ $i ][ 'salt' ] = mt_rand ( 000000 , 999999 );
>
?>
User Contributed Notes 19 notes
Looping through letters is possible. I’m amazed at how few people know that.
returns: R S T U V W X Y Z AA AB AC
Take note that you can’t use $col < 'AD'. It only works with !=
Very convenient when working with excel columns.
The point about the speed in loops is, that the middle and the last expression are executed EVERY time it loops.
So you should try to take everything that doesn’t change out of the loop.
Often you use a function to check the maximum of times it should loop. Like here:
$maxI = somewhat_calcMax ();
for ( $i = 0 ; $i somewhat_doSomethingWith ( $i );
>
?>
And here a little trick:
$maxI = somewhat_calcMax ();
for ( $i = 0 ; $i ?>
The $i gets changed after the copy for the function (post-increment).
You can use strtotime with for loops to loop through dates
Remember that for-loops don’t always need to go ‘forwards’. For example, let’s say I have the following code:
As other comments have pointed out , if «calculateLoopLength» will keep giving back the same value , it can be moved outside the loop :
$loopLength = calculateLoopLength ();
for ( $i = 0 ; $i < $loopLength ; $i ++) doSomethingWith ( $i );
>
?>
However, if the order the looping doesn’t matter (ie. each iteration is independent) then we don’t need to use an extra variable either, we can just count down (ie. loop ‘backwards’) instead:
for ( $i = calculateLoopLength (); $i > 0 ; $i —) doSomething ( $i );
>
?>
In fact, we can simplify this even more, since «$i > 0» is equivalent to «$i» (due to type casting):
for ( $i = calculateLoopLength (); $i ; $i —) doSomething ( $i );
>
?>
Finally, we can switch to a ‘pre-decrement’ instead of a ‘post-decrement’ to be slightly more efficient (see, for example, http://dfox.me/2011/04/php-most-common-mistakes-part-2-using-post-increment-instead-of-pre-increment/ ):
for ( $i = calculateLoopLength (); $i ; — $i ) doSomething ( $i );
>
?>
In this case we could also replace the entire loop with a map, which might make your algorithm clearer (although this won’t work if calculateLoopLength() == 0):
array_map ( ‘doSomething’ ,
range ( 0 , calculateLoopLength () — 1 ));
?>
Php цикл со счетчиком
Для совершения повторяемых действий в PHP, как и в других языках программирования, используются циклы. В PHP имеются следующие виды циклов:
Цикл for
Цикл for имеет следующее формальное определение:
for ([инициализация счетчика]; [условие]; [изменение счетчика]) < // действия >
Рассмотрим стандартный цикл for:
Первая часть объявления цикла — $i = 1 — создает и инициализирует счетчик — переменную $i. И перед выполнением цикла его значение будет равно 1. По сути это то же самое, что и объявление переменной.
Третья часть — $i++ — изменение счетчика на единицу. Опять же нам необязательно увеличивать на единицу. Можно уменьшать: $i—. Или, например, увеличить не на 1, на 3: $i +=3 .
В итоге блок цикла сработает 9 раз, пока значение $i не станет равным 10. И каждый раз это значение будет увеличиваться на 1. Каждое отдельное повторение цикла называется итерацией. Таким образом, в данном случае произойдет 9 итераций.
В итоге браузер отобразит нам следующий результат:
Квадрат числа 1 равен 1 Квадрат числа 2 равен 4 Квадрат числа 3 равен 9 Квадрат числа 4 равен 16 Квадрат числа 5 равен 25 Квадрат числа 6 равен 36 Квадрат числа 7 равен 49 Квадрат числа 8 равен 64 Квадрат числа 9 равен 81
Объявление цикла for может опускать отдельный части. Например, опустить определение счетчика (он может быть определен вне цикла):
Можно опустить изменение значения счетчика и изменять его внутри цикла:
В данном случае в цикле на каждой итерации переменная $i увеличивает значение на 2. Соответственно мы получим следующий результат:
Также можно в объявлении цикла определять и использовать сразу несколько переменных:
В данном случае в объявлении цикла определяются две переменных: $i и $j. При каждой итерации переменная $i увеличивается на 1, а $j — на 2. При этом цикл продолжается, пока сумма двух переменных не достигнет 10:
Также можно применять альтернативный синтаксис, при котором вместо открывающей фигурной скобки ставится двоеточие, а вместо закрывающей фигурной скобки — ключевое слово endfor :
Цикл while
Цикл while проверяет истинность некоторого условия, и если условие истинно, то выполняются блок выражений цикла:
Если в блоке while всего одна инструкция, то фигурные скобки блока можно опустить:
Также можно применять альтернативный синтаксис, при котором вместо открывающей фигурной скобки ставится двоеточие, а вместо закрывающей фигурной скобки — ключевое слово endwhile :
$counter = 1; while($counter<10): echo $counter * $counter . "
"; $counter++; endwhile;
Цикл do..while
Цикл do..while похож на цикл while , только теперь выполняется блок цикла, и только потом выполняется проверка условия. То есть даже если условие ложно, то блок цикла выполнится как минимум один раз:
Операторы continue и break
Иногда возникает ситуация, когда требуется выйти из цикла, не дожидаясь его завершения. В этом случае мы можем воспользоваться оператором break :
80) < break; >echo "Квадрат числа $i равен $result
"; > ?>
И если вдруг результат операции окажется больше 80, то происходит выход из цикла.
Для управления циклами также применяется оператор continue . Он осуществляет переход к следующей итерации цикла:
echo "Квадрат числа $i равен " . $i * $i . "
"; > ?>
При выполнении программы, когда значение $i станет равным 5, произойдет переход к следующей итерации, а все остальные выражения, которые следуют после оператора continue выполняться не будут.
Вложенные циклы
Циклы могут располагаться внутри циклов. Например, используем вложенный цикл, чтобы вывести таблицу умножения:
" . $i * $j . " | "; > echo ""; > ?>
После 9 итераций, когда переменная $j достигнет 10, вложенный цикл завершается, и внешний цикл выводит закрывающий тег строки:
И запускается новая итерация внешнего цикла.
В итоге скрипт сформирует таблицу умножения:
Цикл while в PHP
Циклы используются для того, чтобы некоторый участок кода выполнился несколько раз подряд. Зачем это нужно — представьте, что вам нужно возвести в квадрат 100 элементов массива. Если обращаться к каждому элементу отдельно по его ключу — это займет 100 строчек кода, и для того, чтобы написать этого код, нужно будет потратить довольно много времени.
Но это не нужно — у нас есть возможность сделать так, чтобы PHP за нас выполнил некоторую операцию нужное количество раз. Например, возвел все элементы массива в квадрат. Это и делается с помощью циклов.
Начнем наше изучение циклов с цикла while .
Цикл while будет выполняться до тех пор, пока верно (истинно) выражение, переданное ему параметром. Смотрите синтаксис:
Цикл закончится, когда выражение перестанет быть истинным. Если оно было ложным изначально — то он не выполнится ни разу.
Давайте для примера последовательно выведем с помощью цикла while числа от одного до пяти:
Каждый проход цикла по-научному называется цикла. Можно сказать, что мы увеличиваем нашу переменную $i на единицу в каждой итерации цикла.
Сама переменная $i называется . Счетчики используются для того, чтобы подсчитывать, сколько раз выполнился цикл. Кроме того, они выполняют вспомогательную роль — в нашей задаче мы использовали счетчик, чтобы вывести цифры от 1 до 5 . Для счетчиков принято использовать буквы i , j и k .
Выведите на экран числа от 1 до 100 .
Выведите на экран числа 11 до 33 .