04.11.2017   25
Цикл for в PHP: урок с примерами

Цикл for: работаем с числами

Всем привет! В этом уроке поговорим об еще одном цикле в PHP – for. Он предназначен для случаев, когда нужно работать с числовыми индексами массивов, или же когда нужно осуществлять перебор чисел. Он поначалу кажется более сложным, чем foreach или while, но на самом деле ничего сложного нет.

Выглядит цикл следующим образом:

<?php

for (expr1; expr2; expr3) {
    //loop body
}

Как мы видим, есть 3 выражения, которые находятся в круглых скобках. Давайте разберем каждый из них.

  • expr1 – это выражение выполняется только один раз перед началом цикла. Здесь обычно происходит определение переменной.
  • expr2 – здесь задаётся условие. Если результат этого выражения – true, то цикл выполнится, иначе – закончится. Например, здесь можно проверить, что переменная меньше какого-либо значения.
  • expr3 – тут указывается действие, которое будет выполняться в конце каждой итерации цикла. Например – переменная увеличивается на единицу.

Пример можно? Да пожалуйста!

Давайте теперь рассмотрим реальный пример:

<?php

for ($i = 0; $i < 100; $i++) {
    echo $i;
    echo '<br>';
}

Данный код выведет все числа от 0 до 99.

  1. Итак, перед началом цикла мы определяем переменную $i = 0.
  2. Затем, перед тем как выполнить цикл, мы проверяем, что переменная $i меньше 100. Если это так, то выполнится тело цикла. А именно – выведется текущее значение переменной и выполнится перенос строки.
  3. Следующим шагом будет выполнение третьего выражения – инкремент переменной $i.
  4. Теперь снова будет выполнена проверка условия, что $i < 100. И так далее, пока условие не перестанет выполняться. А если быть точнее – пока $i не станет равной 100. Тут цикл завершит работу.

Есть ещё что-то, что нужно знать?

Стоит отметить, что любое из этих выражений может быть и вовсе пустым. Например, уберем инициализацию переменной из первого выражения и сделаем это перед циклом:

<?php

$i = 0;
for (; $i < 100; $i++) {
    echo $i;
    echo '<br>';
}

Работать такой код будет так же, как и предыдущий вариант. Просто перед началом цикла не будет ничего выполнено.

Можно убрать и третье выражение, которое выполняется после итерации. Перенесем инкремент внутрь тела цикла и результат получится тот же:

<?php

$i = 0;
for (; $i < 100;) {
    echo $i++;
    echo '<br>';
}

Более того, могут вообще отсутствовать все аргументы. При отсутствии второго аргумента получится бесконечный цикл:

<?php

for (;;) {
    //этот код будет выполняться бесконечно
}

Где это применимо?

Цикл for можно применять там, где требуется перебор чисел, или, например, выполнение определенного числа шагов.

Давайте рассмотрим несколько примеров.

Найти все чётные числа от 1 до 50 и вывести их

<?php

for ($i = 1;$i <= 50;$i++) {
    if ($i % 2 === 0) {
        echo $i;
        echo ' ';
    }
}

Создать массив из 50 случайных значений

<?php

$randomValues = [];

for ($i = 1;$i <= 50;$i++) {
    $randomValues[] = mt_rand();
}

var_dump($randomValues);

Посчитать сумму чисел от 1 до 1000

<?php

$sum = 0;
for ($i = 1;$i <= 1000;$i++) {
    $sum += $i;
}

echo $sum;

Как видите, данные задачи элегантно решаются с использованием цикла for. В следующих уроках мы рассмотрим ещё несколько фишек с циклами и научимся реализовывать более сложные алгоритмы. Не забудьте подписаться, чтобы не пропустить новые уроки. А пока поэкспериментируйте с задачами из домашнего задания.

Если этот урок был вам полезен, расскажите об этом курсе своим знакомым или поделитесь на него ссылкой в социальных сетях. Также, если вы хотите помочь проекту материально – вы можете стать патроном проекта – это самые преданные и благодарные читатели, которые вносят неоценимый вклад в развитие проекта. А данный урок вышел при поддержке патрона Евгения Акопяна. Спасибо!

Домашнее задание
Для просмотра нужно войти на сайт.
Или получить доступ прямо сейчас:


Нажимая эту кнопку
Вы принимаете политику конфиденциальности

Комментарии

 trialex3 2017-11-04 21:33:22
+1

<?php
for ($x = 1000;$x<100000;$x++) {
    if ($x % 17 == 0) {
        echo "$x, ";
    }
}
?>

Ответить
 SBTesla 2017-11-05 08:33:48
+1

$prevPrev = 0;
$prev = 1;

echo $prevPrev.'<br>';
echo $prev.'<br>'
for ($x = 1; $x <= 100000;) {
    $x        = $prev + $prevPrev;
    $prevPrev = $prev;
    $prev     = $x;

    echo $x . '<br>';
}

Ответить
  •  ivashkevich 2017-11-11 10:54:20
    0

    Хорошее решение, только отступы надо лишние убрать.

    Ответить
 WarLikeLaux 2017-11-10 15:02:12
+1

enter image description here

Ответить
 WarLikeLaux 2017-11-10 15:30:23
+1

<?php
$temp = array(0,1);
echo $temp[0] . ' ' . $temp[1] . ' ';
for ($i = 1; $i < 100000 ; $i++) {
    if ($i == $temp[0] + $temp[1]) {
        $temp[0] = $temp[1];
        $temp[1] = $i;
        echo $i . ' ';
    }
}

Ответить
  •  ivashkevich 2017-11-11 02:16:45
    0

    Вариант рабочий, засчитываю. Но не самый оптимальный - в вашем варианте $i увеличивается на единицу и происходит очень много лишних действий. Вместо этого лучше в $i присваивать сумму двух предыдущих значений. Как здесь.

    Ответить
 serb2017 2017-11-15 13:35:37
0

<?php
//* числа Фиббоначи

$i1 = 100000;
$arrayF [0] = 0;
$arrayF [1] = 1;
$arrayF [2] = 1;

for ($i = 1; $arrayF [$i] <= $i1; $i++) {
    $arrayF [$i + 1] = $arrayF [$i] + $arrayF[$i - 1];
    echo  'число Фиббоначчи  ' . $i . '=' . $arrayF [$i] . '<br>';
}

Ответить
  •  ivashkevich 2017-11-18 12:49:44
    0

    Отличное решение! Только уберите пробелы между названием массива и [].

    И вот эту строку можно убрать:

    $arrayF[2] = 1;

    P.S. вы можете редактировать свой комментарий.

    Ответить
 serb2017 2017-11-15 18:28:32
0

<?php
//* Числа кратные m
$n = 1;
$m = 17;
$i = 1000;
$i1 = 1000000;
for (; $i <= $i1; $i += $n) {
    if ($i % $m === 0) {
        $array1 [] = $i;
        $n = $m;
    }
}
foreach ($array1 as $i) {
    echo 'число  ' . $i . 'делится на   ' . $m . '=' . $i / $m;
    echo '<br>';
}

Ответить
  •  ivashkevich 2017-11-18 12:52:46
    0

    Хорошее решение! Исправьте кодстайл как я вам уже говорил и попробуйте дать более осмысленные имена переменным.

    Ответить
Чтобы написать комментарий нужно войти на сайт.
Или получить доступ прямо сейчас:


Нажимая эту кнопку
Вы принимаете политику конфиденциальности