Искать
Вы превысили запрос на
0 знаков

13. Циклы foreach и for в PHP

Не пройден
10 заданий
свернуть практику
10 заданий

Кратко

Обзор циклов в программировании на PHP

- Циклы while и do-while используются реже, чем циклы for и foreach.

- Цикл for более гибкий, но требует создания переменных для счётчиков.

- Вложенный цикл for позволяет перебирать массивы с разными счётчиками.

- Цикл foreach прост в использовании и перебирает все элементы массива.

Использование операторов break и continue

- Оператор break прерывает текущий цикл.

- Оператор continue пропускает текущую итерацию цикла.

Задачи для закрепления материала

- Создание массивов и перебор чисел с помощью циклов for и foreach.

- Использование операторов break и continue для управления циклами.

- Вычисление сумм и печать элементов массивов с условиями.

- Создание ассоциативных массивов и перебор элементов с условиями.

Переход к следующему уроку

- В следующем уроке будет рассмотрен раздел про функции.

Мы c вами узнали из предыдущего урока о циклах while и do-while. Честно сказать, эти циклы не так часто используются, как циклы for и foreach. Нам часто будет необходимо перебирать значения и делать необходимые операции с ними, давайте поэтому познакомимся и с более используемыми циклами.

Цикл for

Этот вид циклов сложнее while и do-while, но он более гибкий: нам не нужно создавать лишние переменные для счётчиков и по вложенным массивам он проходится более читабельно.

Пример (php)
for (аргумент 1; аргумент 2; аргумент 3) {
	// Тело цикла
} 

Выше в псевдокоде я написал актуальный синтаксис оператора for. Каждый аргумент должен быть разделён точкой с запятой (;). Вот что нужно писать в каждом аргументе:

  • аргумент 1 — создаём переменную-счётчик;
  • аргумент 2 — создаём условие, до каких пор будет выполняться цикл;
  • аргумент 3 — будем после каждого прохода по циклу к счётчику прибавлять значение.

Пример (php)
<?php
	$arr = [1, 2, 3, 4, 5];
	//   Аргумент 1
	for ($i = 0; $i < count($arr); $i++) {
		print_r($arr[$i]); // Распечатает от 1 до 5
	}
?> 

Число переменных значительно уменьшилось с предыдущего раза. Мы даже можем гибко создать обратный цикл:

Пример (php)
<?php
	$arr = [1, 2, 3, 4, 5];
	
	for ($i = (count($arr) - 1); $i >= 0; $i--) {
		print_r($arr[$i]); // Распечатает 5, 4, 3, 2, 1
	}
?> 

Усложним задачу: у нас есть вложенный массив женских и мужских имён в таком виде:

Пример (text)
[
	['Ярослав', 'Михаил', 'Геннадий'],
	['Людмила', 'Ксения', 'София'],
] 

Необходимо перебрать массивы и распечатать каждое имя на экран:

Пример (php)
<?php
	$arr = 	[
				['Ярослав', 'Михаил', 'Геннадий'],
				['Людмила', 'Ксения', 'София'],
			];
			
	for ($i = 0; $i < count($arr); $i++) {
	    for ($j = 0; $j < count($arr[$i]); $j++) {
	    	print_r($arr[$i][$j] . PHP_EOL);
	    }
	}
?> 

Вывод будет таким:

Пример (text)
Ярослав
Михаил
Геннадий
Людмила
Ксения
София 

Мы с вами создали вложенный массив. Сначала мы перебираем верхний массив с переменной $i, а затем пишем вложенный цикл и перебираем уже вложенные массивы с переменной $j.

Важно

Старайтесь не путать переменные во вложенных циклах. Переменные для каждого цикла должны быть разными.

Таким способом вы можете перебирать очень много вложенных массивов.

Вы могли подумать: «Это же неудобно! Нужно считать вложенные массивы, а если этих значений будет очень много, что делать?»

Хорошая мысль! Нам для этого нужна рекурсия, но об этом в разделе про функции.

Цикл foreach

Самый лёгкий цикл из всех - foreach. В нем нет условий, цикл перебирает все от начала и до конца:

Пример (text)
foreach (массив as ключ => значение) {
	// Логика цикла
} 

В начале круглых скобок цикла мы указываем перебираемый массив. После ключевого слова as мы указываем ключ и значение. В индексном массиве ключом будет индекс элемента, в ассоциативном — строка.

Мы можем опустить ключ. В таком случае цикл будет брать только значение.

Пример (php)
<?php
	$arr = 	['a', 'b', 'c', 'd'];
		
	foreach ($arr as $key => $value) {
		print_r("Ключ: {$key}" . PHP_EOL);
		print_r("Значение: {$value}" . PHP_EOL);
	}
?> 

Вывод будет таким:

Пример (text)
Ключ: 0
Значение: a
Ключ: 1
Значение: b
Ключ: 2
Значение: c
Ключ: 3
Значение: d 

Вы могли заметить константу PHP_EOL - это обычный перевод на новую строку (работает только в консоли, в браузере не будет работать, там нужно использовать HTML теги).

Напишем цикл без ключа:

Пример (php)
<?php
	$arr = 	['a', 'b', 'c', 'd'];
		
	foreach ($arr as $value) {
		print_r("Значение: {$value}" . PHP_EOL);
	}
?> 

Вывод будет таким:

Пример (text)
Значение: a
Значение: b
Значение: c
Значение: d 

Операторы break и continue

В циклах существуют ещё два очень важный оператора.

  • Оператор break - прерывает выполнение текущего цикла.
  • Оператор continue - выполняет переход к следующей итерации цикла.

Попробуем их на практике. Дан массив и переменная, если в массиве существует значение из переменной необходимо остановить цикл. Для решения задачи будем использовать цикл foreach.

Пример (php)
<?php
	$arr = [2, 13, 31, 54, 5776, 67676, 534];
	$number = 5776;
	foreach ($arr as $value) {
		if ($value === $number) {
			break;
		}
		
		print_r($value . PHP_EOL);
	}
?> 

Вывод будет таким:

Пример (text)
2
13
31
54
5776
67676 

Тоже самое с оператором continue, только в таком случае будет пропущена итерация:

Пример (php)
<?php
	$arr = [2, 13, 31, 54, 5776, 67676, 534];
	$number = 5776;
	foreach ($arr as $value) {
		if ($value === $number) {
			continue;
		}
		
		print_r($value . PHP_EOL);
	}
?> 

Вывод будет таким:

Пример (text)
2
13
31
54
67676
534 

Заключение

Рассмотрели ещё два важных цикла. Они, на самом деле, очень часто используются в каждом языке. Допустим, функция array_sum() суммирует все элементы массива и возвращает результат. Суммирует она, конечно же, с помощью цикла, так что циклы сплошь и рядом.

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

На этом моменте мы переходим к разделу про функции.

Задания

1. Создайте массив из 10 целых чисел. Используя цикл for, выведите на экран только четные числа. Если встречается число 0, прервите цикл.

2. С помощью цикла foreach переберите массив строк, состоящий из имен. Выведите каждое имя, кроме тех, которые начинаются на букву "А". Используйте оператор continue. (здесь вам нужно будет применить [ссылка доступна авторизованным пользователям])

3. Создайте массив из 10 случайных чисел от 1 до 100. Найдите сумму чисел, пока не встретите число больше 50. Используйте цикл for и break.

4. Используя цикл for, напечатайте числа от 1 до 20. Пропустите числа, кратные 3.

5. С помощью foreach переберите массив дней недели. Выведите все дни, кроме субботы и воскресенья.

6. Создайте массив из 15 целых чисел. Используя for, найдите и выведите первое число, которое делится на 5.

7. Напишите цикл for, который считает от 100 до 0. Пропустите числа, которые делятся на 7, выведите остальные числа.

8. Создайте ассоциативный массив с названиями фруктов и их ценами. Используя foreach, выведите названия фруктов, чья цена больше 50, и пропустите другие.

9. С помощью цикла for напечатайте квадрат каждого числа от 1 до 10. Если квадрат равен 36, прервите выполнение цикла.

10. Используя foreach, переберите массив с числами от 1 до 30. Выведите на экран только те числа, которые не являются делителями 4.

Похожие уроки Codebra

@codebra_official
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Пользовательские функции в PHPКурс по PHP
Обработка исключений (try/except) в PythonЗнакомство с Python
Массивы в PHPКурс по PHP
Типы данных в PythonЗнакомство с Python
Переменные, комментарии и типы данных в PHPКурс по PHP
Первое знакомство с PythonЗнакомство с Python
Введение в раздел «Структуры данных в Python»Знакомство с Python
List/dict/set comprehensions (включения) в PythonЗнакомство с Python
Функциональное программирование (map, filter и reduce)Знакомство с Python
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию и компьютерной безопасности. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Пентесту Active Directory, Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

Если что-то не нашли, то воспользуйтесь поиском по сайту, который находится на главной странице в самом верху.

Удачи в обучении!

Закрыть окно