🐘 PHP

Цикл for в PHP 8.2: подробное руководство

Цикл for: Повторяем действия с умом

Введение: Зачем нужен цикл?

Представь, что тебе нужно написать на доске фразу «Я молодец» 10 раз. Если делать это вручную, ты напишешь одну строчку, потом вторую... это скучно и долго. А если нужно 100 раз? Или 1000?

В программировании для таких повторяющихся действий существует специальная конструкция — цикл. Цикл for — это как «умный повторятель». Ты говоришь ему: «Повторяй вот это действие столько-то раз», и компьютер делает всё сам. Это экономит время и силы.

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

Основной синтаксис цикла for

В PHP цикл for записывается так:

<?php
for (начало; условие; шаг) {
    // Действие, которое нужно повторить
}
?>

Разберём три части в скобках:

  • Начало — это точка старта. Обычно мы заводим счётчик: $i = 0 или $i = 1. Это номер нашего шага.
  • Условие — пока оно верно, цикл продолжается. Как только становится ложным — цикл останавливается. Например: $i < 5 (повторять, пока счётчик меньше 5).
  • Шаг — что происходит с счётчиком после каждого повторения. Чаще всего: $i++ (увеличить на 1).

Внутри фигурных скобок { } пишется то, что нужно повторять.

Пример 1: Простой счёт

Выведем числа от 1 до 5:

<?php
for ($i = 1; $i <= 5; $i++) {
    echo "Число: " . $i . "\n";
}
?>

Вывод:

Число: 1
Число: 2
Число: 3
Число: 4
Число: 5

Здесь $i начинается с 1. Пока $i <= 5 (меньше или равно 5), мы выводим число. После каждого круга $i увеличивается на 1 ($i++). Когда $i становится 6, условие 6 <= 5 — ложь, цикл заканчивается.

Пример 2: Повторяем фразу с клавиатуры

Представь задачу из банкомата: пользователь вводит, сколько раз повторить фразу. Программа читает это число и выводит фразу нужное количество раз.

<?php
$count = (int) fgets(STDIN);  // Читаем число с клавиатуры
$phrase = "Пароль принят";

for ($i = 0; $i < $count; $i++) {
    echo $phrase . "\n";
}
?>

Ввод: 3

Вывод:

Пароль принят
Пароль принят
Пароль принят

Обрати внимание: $i начинается с 0, а условие $i < $count. Если ввести 3, цикл выполнится для $i = 0, 1, 2 — ровно 3 раза.

Разбор типичных задач

Задача «Лифт»

Условие: Лифт едет с нулевого этажа на нужный этаж N. Дисплей показывает каждый этаж, который проезжает лифт (от 1 до N).

Решение: Выводим этажи от 1 до N.

<?php
$targetFloor = (int) fgets(STDIN);  // Читаем номер этажа

for ($floor = 1; $floor <= $targetFloor; $floor++) {
    echo "Этаж " . $floor . "\n";
}
echo "Приехали!";
?>

Ввод: 4

Вывод:

Этаж 1
Этаж 2
Этаж 3
Этаж 4
Приехали!

Задача «День рождения»

Условие: У тебя есть K конфет. Ты раздаёшь их одноклассникам по одной, пока конфеты не закончатся. Всего в классе M учеников. Сколько конфет ты раздашь?

Решение: Если конфет меньше, чем учеников, то раздашь все. Иначе — раздашь по одной каждому.

<?php
$candies = (int) fgets(STDIN);  // Сколько конфет
$students = (int) fgets(STDIN); // Сколько учеников

$given = 0;
for ($i = 0; $i < $students && $candies > 0; $i++) {
    $candies--;   // Отдаём одну конфету
    $given++;     // Считаем, сколько отдали
}
echo "Раздано конфет: " . $given;
?>

Ввод: 3 (конфеты), 5 (ученики)

Вывод: Раздано конфет: 3

Здесь в условии цикла стоит $i < $students && $candies > 0 — цикл работает, пока есть и ученики, и конфеты.

Частые ошибки новичков

  • Бесконечный цикл: Если забыть изменить счётчик ($i++) или написать условие, которое всегда истинно (например, $i > 0 при старте с 1), программа будет работать вечно. Всегда проверяй, что счётчик меняется в нужную сторону.
  • Путаница в начале отсчёта: Если нужно повторить действие 5 раз, можно начать с $i = 0; $i < 5 (0,1,2,3,4 — 5 раз) или с $i = 1; $i <= 5 (1,2,3,4,5 — тоже 5 раз). Выбирай любой способ, главное — не ошибиться в количестве.
  • Забытые фигурные скобки: Если в цикле только одно действие, скобки можно не ставить, но новичкам лучше всегда их писать — это делает код понятнее и уберегает от ошибок.
  • Ошибка на единицу: Если нужно вывести числа от 1 до N, а ты пишешь $i < N вместо $i <= N, то последнее число не выведется. Будь внимателен со знаками < и <=.

Итоговый пример: Поднятие мотивации

Задача: Ты пришёл в спортзал и решил сделать N упражнений. Тренер говорит тебе: «На каждом подходе делай на одно повторение больше, чем в предыдущем». Начни с 1 повторения. Выведи, сколько повторений ты сделаешь на каждом подходе.

Решение: Используем цикл от 1 до N, и на каждом шаге выводим номер подхода и количество повторений (равное номеру подхода).

<?php
$approaches = (int) fgets(STDIN);  // Сколько подходов

echo "Твоя тренировка:\n";
for ($i = 1; $i <= $approaches; $i++) {
    echo "Подход " . $i . ": " . $i . " повторений\n";
}
echo "Молодец, ты справился!";
?>

Ввод: 4

Вывод:

Твоя тренировка:
Подход 1: 1 повторений
Подход 2: 2 повторений
Подход 3: 3 повторений
Подход 4: 4 повторений
Молодец, ты справился!

Видишь, как легко? Цикл for сам посчитал всё за тебя. Теперь ты можешь решать задачи, где нужно что-то повторить определённое количество раз — будь то этажи, конфеты или упражнения. Главное — запомнить три части цикла: начало, условие и шаг. Удачи в программировании!