Учебные задачи PHP. Задача 13

Список учебных задач PHP здесь

Условие: Создайте функцию, которая принимает на вход массив случайных чисел из диапазона [5..12]. Обходит этот массив и делает для каждого элемента следующее (пусть она оказывает побочный эффект прямо в своём теле): Если это число равно 5 -- то выведете на экран строку "пять", если 6 -- то строку "шесть", если 7 то число "7", иначе -- строку "какое-то другое число". Используйте для решения задачи оператор switch.

<?php
$n = 9;
for ($i = 0; $i < $n; $i++) {
	$arr[$i] = rand(5, 12); // Заполняем массив рандомными значениями
}
function idNumber($arr) {
	foreach ($arr as $elem) { // Перебираем значения в рандомном массиве
		switch ($elem) {  // Определяем, что за число
			case "5":
				echo "Пять", "<br>";
				break;
			case "6":
				echo "Шесть", "<br>";
				break;
			case "7":
				echo "Семь", "<br>";
				break;
			default:
				echo "Другое число", "<br>";
				break;
		}
	}
}
idNumber($arr);
?>

Key Words for FKN + antitotal forum (CS VSU):

melisa's picture

  1. $n = 9;
    for ($i = 0; $i < $n; $i++) {
        $arr[$i] = rand(5, 12); // Заполняем массив рандомными значениями
    }

    В данном случае использование переменной $n не оправдано - это величина постоянная.
    Можно просто $i

  2. Ваша функция оказывает побочный эффект. Перепишите её так, чтобы она возвращала
    значение, а печаталось оно уже после вызова функции. Такая же проблема, как здесь.
  3. case "7":
            echo "Семь", "<br>";
            break;
        default:
            echo "Другое число", "<br>";
            break;

    Внимательно читайте условие задачи. Что должно быть выведено, если значение = 7? И что,
    если значение не 5, 6 или 7?

  4. default:
        echo "Другое число", "<br>";
        break;

    break в секции default не обязателен, т.к. после default программа и так заканчивает
    выполнение switch.

    Это не вызовет ошибки, просто Вы должны понимать, для чего нужен break.

rvsokolov's picture

2. У меня были проблемы с return, но вроде я разобрался
3. Да, действительно, невнимательно прочитал условие — исправился
4. Я запомнил про необязательность break в секции default

<?php
for ($i = 1; $i <= 9; $i++) {
    $arr[$i] = rand(5, 12); // Заполняем массив рандомными значениями
}
function idNumber($arr) {
    foreach ($arr as $elem) { // Перебираем значения в рандомном массиве
        switch ($elem) {  // Определяем, что за число
            case "5":
                echo "пять", "<br>";
                break;
            case "6":
                echo "шесть", "<br>";
                break;
            case "7":
                echo "7", "<br>";
                break;
            default:
                echo "какое-то другое число", "<br>";
		}
	}
	return $elem;
}
idNumber($arr)
?>
melisa's picture

У меня были проблемы с return, но вроде я разобрался

Прошу прощения, здесь у Вас всё было правильно. Так даже в условии написано, что должен оказываться побочный эффект.

И что же Вы меня не поправляете??? )) Опять невнимательность)

Практического смысла возвращать значение последнего жлемента массива нет. А всё, что можно удалить - нужно удалить. Правило такое.

Если Вы видите что-то нецелесообразное, у Вас автоматически должен возникать вопрос: "Я чего-то не понимаю? Или требования неадекватные?".

Так вот, возвращать значение можно было бы, если бы в функцию передавалось одно значение и вывести нужно было бы только 1 результат. А т.к. у нас массив и результатов много, для облегчения задачи, условием предложено печатать результаты прямо в теле функции.

melisa's picture

принято