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

Отработка циклов

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

Выведите с помощью цикла столбец чисел от 1 до 100.

Решение:

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

Выведите с помощью цикла столбец четных чисел от 1 до 100.

Решение:

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

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

Решение:

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

Найдите с помощью цикла сумму квадратов чисел от 1 до 15.

Решение:

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

Найдите с помощью цикла сумму корней чисел от 1 до 15. Результат округлите до двух знаков после дробной части.

Решение:

<?php
	$sum = 0;
	for ($i = 1; $i <= 15; $i++) {
		$sum += sqrt($i);
	}
	echo round($sum, 2);
?>

Найдите с помощью цикла сумму тех чисел от 1 до 100, которые делятся на 7.

Решение:

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

Заполните массив 10-ю иксами с помощью цикла.

Решение:

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

Заполните массив числами от 1 до 10 с помощью цикла.

Решение:

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

Заполните массив числами от 10 до 1 с помощью цикла.

Решение:

<?php
	$arr = [];
	for ($i = 10; $i > 0; $i--) {
		$arr[] = $i;
	}
	var_dump($arr);
?>

Заполните массив 10-ю случайными числами от 1 до 10 с помощью цикла.

Решение:

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

С помощью цикла создайте строку из 6-ти символов, состоящую из случайных чисел от 1 до 9.

Решение:

<?php
	$str = '';
	for ($i = 1; $i <= 6; $i++) {
		$str .= rand(1, 9);
	}
	echo $str;
?>

Дан массив с числами. С помощью цикла найдите сумму элементов этого массива.

Решение:

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

Дан массив с числами. С помощью цикла найдите сумму квадратов элементов этого массива.

Решение:

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

Дан массив с числами. С помощью цикла найдите корень из суммы квадратов элементов этого массива. Результат округлите в меньшую сторону до целых.

Решение:

<?php
	$arr = [1, 2, 3, 4, 6, 9, 11];
	$sum = 0;
	foreach ($arr as $elem) {
		$sum += $elem * $elem;
	}
	echo floor(sqrt($sum));
?>

Дан массив с числами. Найдите сумму тех элементов массива, которые больше 0 и меньше 10.

Решение:

<?php
	$arr = [1, 2, 3, 4, 6, 9, 11];
	$sum = 0;
	foreach ($arr as $elem) {
		if ($elem > 0 and $elem < 10)
			$sum += $elem;
		}
	}
	echo $sum;
?>

Дан массив с числами. Проверьте, что в нем есть 3 одинаковых числа подряд.

С помощью цикла сформируйте строку '1223334444...' и так далее до заданного числа.

Решение:

<?php
	$str = '';
	for ($i = 1; $i <= 10; $i++) {
		for ($j = 1; $j <= $i; $j++) {
			$str .= $i;
		}
	}
	echo $str;
?>

Дан многомерный массив (см. его под задачей). С помощью цикла выведите строки в формате 'имя-зарплата'.

<?php
	$arr = [
		0=>['name'=>'Коля', 'salary'=>300],
		1=>['name'=>'Вася', 'salary'=>400],
		2=>['name'=>'Петя', 'salary'=>500],
	];
?>

Решение:

<?php
	foreach ($arr as $elem) { 
		echo $elem['name'] .'-'. $elem['salary'] . '<br>';
 	}
 ?>

Заполните двумерный массив случайными числами от 1 до 10. В каждом подмассиве должно быть по 10 элементов. Должно быть 10 подмассивов.

Решение:

<?php
	$arr = [];
	for ($i = 0; $i < 10; $i++) {
		for ($j = 0; $j < 10; $j++)
			$arr[$i][] = mt_rand(1, 10);
		}
	}
	var_dump($arr);
?>

Практика

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

Напишите свой аналог функции ucfirst (аналог - значит можно использовать все, что угодно, кроме этой функции).

Решение:

<?php
	$str = 'apple';
	$first = substr($str, 0, 1);
	$str = strtoupper($first).substr($str, 1, strlen($str));
	echo $str;
?>

Напишите свой аналог функции strrev. Решите задачу двумя способами.

Подсказка:
первый вариант решения: используйте функции split и array_reverse,
второй вариант решения: сделайте цикл, который будет брать символы с конца строки и формировать новую строку.

Решение:

Способ № 1

<?php
	$str ='apple';
	$arr = str_split($arr, 1);
	$arr = array_reverse($arr);
	$str = implode($arr);
	echo $str;
?>

Способ № 2

<?php
	$str ='apple';
	$str2 = '';
	$numStr = strlen($str);;
	for ($i = $numStr; $i >= 1; $i--) {
		$str2 .= substr($str, $i-1, 1);
	}
	echo $str2;
?>

Напишите свой аналог функции strlen.

Решение:

<?php
	$str = 'apple';
	$numStr = count(str_split($str, 1));
	echo $numStr;
 ?>

Поменяйте в строке большие буквы на маленькие и наоборот.

Решение:

<?php
	$str = 'apple';
	$str1 = str_split($str);
	$str2 = '';
	foreach ($str1 as $elem) {
		if(ord($elem) >= 97 && ord($elem) <= 122) {
			$str2 .= strtoupper($elem);
		} else {
			$str2 .= strtolower($elem);
		}
	}
	echo $str2;
?>

Преобразуйте строку 'var_text_hello' в 'varTextHello'. Скрипт должен работать с любыми стоками такого рода.

Решение:

<?php
	$arr = explode('_', 'var_test_text');
	$str = '';
	foreach ($arr as $elem) {
		if($elem == $arr[0]) {
			$str .= $elem;
		} else {
			$str .= ucfirst($elem);
		}
	}
	echo $srtr;
?>

С помощью только одного цикла нарисуйте следующую пирамидку:

Подсказка: используйте цикл и функцию str_repeat.

1
22
333
4444
55555
666666
7777777
88888888
999999999

Решение:

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

Нарисуйте пирамиду, как показано на рисунке, только у вашей пирамиды должно быть не 5 рядов, а произвольное количество, оно задается так: $str = 'xxxxxxxx'; - это первый ряд пирамиды.

Подсказка: используйте цикл и функцию substr.

xxxxx
xxxx
xxx
xx
x

Решение:

<?php
	$str = 'xxxxxxxxxx';
	$strNum = strlen($str);
	$str2 = '';
	for ($i = $c; $i > 0; $i--) {
		$str2 .= substr($str, 0, $i) . '<br>';
	}
	echo $str2;
 ?>

Дан массив с произвольными числами. Сделайте так, чтобы элемент повторился в массиве количество раз, соответствующее его числу. Пример: [1, 3, 2, 4] превратится в [1, 3, 3, 3, 2, 2, 4, 4, 4, 4].

Решение:

<?php
	$arr = [1, 2, 3, 4];
	$newArr = [];
	foreach ($arr as $elem) {
		for ($i = 1; $i <= $elem; $i++) {
			$newArr[] = $elem;
		}
	}
	var_dump($newArr);
?>

Дан массив с произвольными целыми числами. Сделайте так, чтобы первый элемент стал ключом второго элемента, третий элемент - ключом четвертого и так далее. Пример: [1, 2, 3, 4, 5, 6] превратится в [1=>2, 3=>4, 5=>6].

Решение:

<?php
	$arr = [1, 2, 3, 4, 5, 6];
	$newArr = [];
	$key = [];
	$num = count($arr);
	for ($i = 1; $i <= $num -1; $i+= 2) {
		$key = $arr[$i];
		$newArr[$key] = $arr[$i + 1];
	}
	var_dump($newArr);
?>

Дана строка. Удалите из этой строки четные символы.

Решение:

<?php
	$str = 'aazzqqq';
	$i = 0;
	$res = '';
	while ($i <= strlen($str)) {
		$res .= substr($str, $i, 1);
		$i += 2;
	}
	echo $res;
?>

Дана строка. Поменяйте ее первый символ на второй и наоборот, третий на четвертый и наоборот, пятый на шестой и наоборот и так далее. То есть из строки '12345678' нужно сделать '21436587'.

Решение:

<?php
	$str = '12345678';
	$newStr = array_reverse(str_split(strrev($str), 2));
	echo implode('', $newStr);
?>

Сделайте аналог функции array_unique.

Решение:

<?php
	function getArrUnique ($arr)
	{
		$result = [];
		foreach ($arr as $elem) {
			if (in_array($elem, $result) == false) {
				$result[] = $elem;
			}
		}
		return $result;
	}
?>

Сделайте функцию, противоположную функции array_unique. Ваша функция должна оставлять дубли и удалять элементы, не имеющие дублей.

Решение:

<?php
	$arr = [1, 1, 1, 2, 3, 3, 4 ,5, 1, 6, 1, 3];
	$newArr = [];
	$elems = count($arr);
	for ($i = 0; $i < $elems; $i++) {
		$value = $arr[$i];
		unset($arr[$i]);
		if (in_array($value, $arr)) {
			$newArr[] = $value;
		}
		$arr[$i] = $value;
	}
	$arr = $newArr;
	echo var_dump($arr);
?>

Напишите скрипт, который проверяет, является ли данное число простым (простое число - это то, которое делится только на 1 и на само себя).

Решение:

<?php
	$num = 31;
	$flag = false;
	for ($i = 2; $i < $num; $i++) {
		if ($num % $i == 0) {
			$flag = true;
			break;
		}
	}

	if ($flag == true) {
		echo'Простое число';
	} else {
		echo 'Сложное число'
	}
?>

Дан массив со строками. Запишите в новый массив только те строки, которые начинаются с 'http://'.

Решение:

<?php
	$arr = ['http://google.com', 'https://youtube.com', 'https://vk.com'];
	$newArr = [];
	foreach ($arr as $elem) {
		$pos = strpos($elem, 'http://');
		if ($pos !== false) {
			$newArr[] = $elem;
		}
	}
	
	var_dump($newArr);
?>