Примеры решения задач

Задача

Задача. Дан массив с элементами 'html', 'css', 'php', 'js', 'jq'. С помощью цикла foreach выведите эти слова в столбик.

Решение: Для начала необходимо создать сам массив. В данном случае мы можем воспользоваться различными способами: объявить через [] либо просто воспользоваться присваиванием $arr[] = 'html'; $arr[] = 'php'; и так далее. Я выбрал первый способ, так как он занимает меньше места при записи:

<?php
	$arr = ['html', 'css', 'php', 'js', 'jq'];
?>

Теперь необходимо воспользоваться циклом foreach:

<?php
	$arr = ['html', 'css', 'php', 'js', 'jq'];
	foreach ($arr as $elem) {
		echo $elem.'<br>'; 
	}
?>

Как это все работает: в переменной $elem все элементы будут лежать по порядку: сначала 'html', потом 'css' и так далее. Я буду выводить их на экран с помощью echo, а после вывода элемента ставить тег <br> (он делает перевод строки). Содержимое $elem и тег <br> являются строками, поэтому между ними я ставлю точку - соединяю тем самым две строки вместе.

Задача

Задача. Дан массив с элементами 10, 20, 15, 17, 24, 35. Найдите сумму элементов этого массива. Запишите ее в переменную $result.

Решение: Первое решение, которое может прийти в голову новичку - это просуммировать все элементы массива 'руками': $arr[0]+$arr[1]+...+$arr[5].

Однако, этот способ не правильный, так как в случае изменения массива код придется переписывать (например, в него добавится еще 10 элементов, или 100, что вообще будет печально). Решение необходимо делать как можно более универсальным.

Поэтому мы должны воспользоваться циклом foreach - в этом случае мы не будем привязаны к количеству элементов массива.

Теперь нужно подумать о том, как просуммировать элементы массива в цикле. Для этого я введу переменную $result, к которой при каждом проходе цикла буду прибавлять ее саму и еще один элемент массива таким образом $result = $result + $elem:

<?php
	$arr = [10, 20, 15, 17, 24, 35];

	$result = 0;
	foreach ($arr as $elem) {
		$result = $result + $elem;
	}
	echo $result; //выведем сумму на экран
?>

В строке $result = 0 я зануляю переменную $result, если этого не сделать - в цикле возникнет ошибка в строке $result = $result + $elem, так как при первом проходе цикла переменная $result не будет определена.

Как работает строчка $result = $result + $elem: при первом проходе в переменной $result будет 0, в $elem – 10 (первый элемент массива), тогда в $result запишется 0+10 = 10.

При втором проходе цикла в $result лежит уже 10 (значение из прошлого прохода цикла), а в $elem лежит 20 (следующий элемент массива), тогда в $result запишется 10+20=30.

При третьем проходе цикла в $result лежит 30, а в $elem – 15, в $result запишется 30+15 = 45. И так далее пока цикл не закончится.

Строчку $result = $result + $elem можно записать короче: $result += $elem.

Задача

Задача. Выведите столбец чисел от 1 до 100.

Решение: Задачу можно решить как циклом for, так и циклом while. Вначале решим через цикл while:

<?php
	$i = 1; //счетчик цикла устанавливаем в 1
	while ($i <= 100) {
		echo $i.'<br>'; //выведет 1,2... 100
		/*
			С помощью оператора ++ увеличиваем $i 
			на единицу при каждом проходе цикла:
		*/
		$i++;
	}
?>

Решение через цикл for:

<?php
	/*
		В начале цикла $i будет равно 1,
 		цикл будет выполнятся пока $i <= 100,
		после каждого прохода к $i прибавляется единица:
	*/
	for ($i = 1; $i <= 100; $i++) {
		echo $i.'<br>'; //выведет 1,2... 100
	}
?>

Задачи для решения

Работа с foreach

Дан массив с элементами 'html', 'css', 'php', 'js', 'jq'. С помощью цикла foreach выведите эти слова в столбик.

Решение:

<?php
	$arr = ['html', 'css', 'php', 'js', 'jq'];
	foreach ($arr as $elem) {
		echo $elem.'<br>';
	}
?>

Дан массив с элементами 1, 2, 3, 4, 5. С помощью цикла foreach найдите сумму элементов этого массива. Запишите ее в переменную $result.

Решение:

<?php
	$arr = [1, 2, 3, 4, 5];
	$result = 0;
	foreach ($arr as $elem) {
		$result += $elem;
	}
	echo $result;
?>

Дан массив с элементами 1, 2, 3, 4, 5. С помощью цикла foreach найдите сумму квадратов элементов этого массива. Результат запишите переменную $result.

Решение:

<?php
	$arr = [1, 2, 3, 4, 5];
	$result = 0;
	foreach ($arr as $elem) {
		$result += $elem * $elem;
	}
	echo $result;
?>

Работа с ключами

Дан массив $arr. С помощью цикла foreach выведите на экран столбец ключей и элементов в формате 'green - зеленый'.

$arr = ['green'=>'зеленый', 'red'=>'красный','blue'=>'голубой'];

Решение:

<?php
	$arr = ['green'=>'зеленый', 'red'=>'красный','blue'=>'голубой'];
	foreach ($arr as $key=>$elem) {
		echo $key.' - '.$elem.'<br>';
	}
?>

Дан массив $arr с ключами 'Коля', 'Вася', 'Петя' и с элементами '200', '300', '400'. С помощью цикла foreach выведите на экран столбец строк такого формата: 'Коля - зарплата 200 долларов.'.

Решение:

<?php
	$arr = ['Коля'=>'200', 'Вася'=>'300','Петя'=>'400'];
	foreach ($arr as $key=>$elem) {
		echo $key.' - зарплата '.$elem.' долларов<br>';
	}
?>

Циклы while и for

Решите эти задачи сначала через цикл while, а затем через цикл for.

Выведите столбец чисел от 1 до 100.

Решение:

Через while:

<?php
	$i = 1;
	while ($i <= 100) {
		echo $i.'<br>';
		$i++;
	}
?>

Через for:

<?php
	for ($i = 1; $i <= 100; $i++) {
		echo $i.'<br>';
	}
?>

Выведите столбец чисел от 11 до 33.

Решение:

Через while:

<?php
	$i = 11;
	while ($i <= 33) {
		echo $i.'<br>';
		$i++;
	}
?>

Через for:

<?php
	for ($i = 11; $i <= 33; $i++) {
		echo $i.'<br>';
	}
?>

Выведите столбец четных чисел в промежутке от 0 до 100.

Решение:

Через while:

<?php
	$i = 0;
	while ($i <= 100) {
		echo $i.'<br>';
		$i += 2;
	}
?>

Через for:

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

С помощью цикла найдите сумму чисел от 1 до 100.

Решение:

Через while:

<?php
	$sum = 0;
	$i = 1;
	while ($i <= 100) {
		$sum += $i;
		$i++;
	}
?>

Через for:

<?php
	$sum = 0;
	for ($i = 1; $i <= 100; $i++) {
		$sum += $i;
	}
?>

Задачи

Дан массив с элементами 2, 5, 9, 15, 0, 4. С помощью цикла foreach и оператора if выведите на экран столбец тех элементов массива, которые больше 3-х, но меньше 10.

Решение:

<?php
	$arr = [2, 5, 9, 15, 0, 4];
	foreach ($arr as $elem) {
		if ($elem > 3 and $elem < 10) {
			echo $elem.'<br>';
		}
	}
?>

Дан массив с числами. Числа могут быть положительными и отрицательными. Найдите сумму положительных элементов этого массива.

Решение:

<?php
	$sum = 0;
	$arr = [2, -5, -9, 15, 11, -4];
	foreach ($arr as $elem) {
		if ($elem > 0) {
			$sum += $elem;
		}
	}
?>

Дан массив с элементами 1, 2, 5, 9, 4, 13, 4, 10. С помощью цикла foreach и оператора if проверьте есть ли в массиве элемент со значением, равным 4. Если есть - выведите на экран 'Есть!' и выйдите из цикла. Если нет - ничего делать не надо.

Решение:

<?php
	$arr = [1, 2, 5, 9, 4, 13, 4, 10];
	foreach ($arr as $elem) {
		if ($elem == 4) {
			echo 'Есть!';
			break; //выйдем из цикла
		}
	}
?>

Дан массив числами, например: ['10', '20', '30', '50', '235', '3000']. Выведите на экран только те числа из массива, которые начинаются на цифру 1, 2 или 5.

Решение:

<?php
	$arr = ['10', '20', '30', '50', '235', '3000'];
	foreach ($arr as $elem) {
		if ($elem[0] == '1' or $elem[0] == '2' or $elem[0] == '5') {
			echo $elem.'<br>';
		}
	}
?>

Дан массив с элементами 1, 2, 3, 4, 5, 6, 7, 8, 9. С помощью цикла foreach создайте строку '-1-2-3-4-5-6-7-8-9-'.

Решение:

<?php
	$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
	$str = '';
	foreach ($arr as $elem) {
		$str .= '-'.$elem;
	}
	echo $str.'-';
?>

Составьте массив дней недели. С помощью цикла foreach выведите все дни недели, а выходные дни выведите жирным.

Решение:

<?php
	$arr = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
	foreach ($arr as $key=>$elem) {
		if ($key == 5 or $key == 6) {
			echo '<b>'.$elem.'</b><br>';
		} else {
			echo $elem.'<br>';
		}
	}
?>

Составьте массив дней недели. С помощью цикла foreach выведите все дни недели, а текущий день выведите курсивом. Текущий день должен храниться в переменной $day.

Решение:

<?php
	$arr = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
	$day = 2; //пусть сегодня второй день
	
	foreach ($arr as $key=>$elem) {
		if ($key == $day) {
			echo '<i>'.$elem.'</i><br>';
		} else {
			echo $elem.'<br>';
		}
	}
?>

Задачи посложнее

С помощью цикла for заполните массив числами от 1 до 100. То есть у вас должен получится массив [1, 2, 3... 100].

Решение:

<?php
	$arr = [];
	for ($i = 1; $i <= 100; $i++) {
		$arr[] = $i;
	}
	
	var_dump($arr);
?>

Дан массив $arr. С помощью цикла foreach запишите английские названия в массив $en, а русские - в массив $ru.

$arr = ['green'=>'зеленый', 'red'=>'красный', 'blue'=>'голубой'];

Решение:

<?php
	$arr = ['green'=>'зеленый', 'red'=>'красный', 'blue'=>'голубой'];
	foreach ($arr as $key=>$elem) {
		$en[] = $key;
		$ru[] = $elem;
	}
	
	var_dump($en);
	var_dump($ru);
?>

Дано число $num=1000. Делите его на 2 столько раз, пока результат деления не станет меньше 50. Какое число получится? Посчитайте количество итераций, необходимых для этого (итерация - это проход цикла). Решите задачу сначала через цикл while, а потом через цикл for.

Решение:

Через while:

<?php
	$num = 1000;
	$i = 0;
	while ($num > 50) {
		$num /= 2;
		$i++;
	}

	echo $i.'<br>'; //кол-во итераций
	echo $num; //число, которое получилось
?>

Через for:

<?php
	//Это цикл без тела {}, все происходит внутри:
	for ($num = 1000, $i = 0; $num > 50; $num /= 2, $i++);

	echo $i.'<br>'; //кол-во итераций
	echo $num; //число, которое получилось
?>