Задачи для решения
Отработка циклов
В следующих задачах вы должны вспомнить работу с циклами 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.
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.
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);
?>