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

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

Условие: Задать двумерный массив размерностью m на n (MxN) элементов (m и n вынести в область определения констант), заполнить его случайными значениями и вывести их на экран уже после того, как весь массив будет заполнен (т.е. заполнять и выводить в разных группах циклов).

<?php
define("m", 7);
define("n", 9);
for($m = 1; $m <= m; $m++ ) {
	for($n = 1; $n <= n; $n++) {
	$arr[$m][$n] = rand(-21, 35);
	}
}
foreach($arr as $m => $startValue) {
	foreach($startValue as $n => $result) {
		echo "значение массива [$m][$n] = ", $result, "<br>";
	}
}
?>
melisa's picture

  1. define("m", 7);
    define("n", 9);

    В php принято называть константы большими буквами. В данном случае, M и N. Или если название сложное, то так: LONG_CONST_NAME

  2. foreach($arr as $m => $startValue) {

    Поясните, пожалуйста, смысл названия переменной - $startValue.

rvsokolov's picture

1. На счет именования констант запомнил

<?php
define("M", 7);
define("N", 9);
for($m = 1; $m <= M; $m++ ) {
    for($n = 1; $n <= N; $n++) {
    $arr[$m][$n] = rand(-21, 35);
    }
}
foreach($arr as $m => $startValue) {
    foreach($startValue as $n => $result) {
        echo "значение массива [$m][$n] = ", $result, "<br>";
    }
}
?>

2. Просто осталась привычка с учебника, там синтаксис выглядел так:

foreach($array as $key => $value)

Но в нашем случае конечный value это result, поэтому я переименовал, но чтобы при этом не запутаться). Нужно было просто сделать буквенную переменную и не вводить никого в заблуждение.

melisa's picture

Называть переменные и методы в программировании принято информативно. Что это значит? Это значит, что имя переменной должно отвечать на вопрос "Что в ней лежит", а метода - "Что он делает". Причём не "как я воспринимаю, что там лежит", а "что это реально". То есть не "вкусненькое", а "мёд".

Итак, в данном случае у нас есть двумерный массив. Начальное и конечное значение - эти названия ничего нам не говорят. Начало и конец чего?

Однако у нас есть внешний массив и внутренний:

foreach($arr as $outerIndex => $outerValue) {
    foreach($outerValue as $innerIndex => $innerValue) {

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

rvsokolov's picture

Про привычки вы правы, буду стараться такие моменты отслеживать.

Как пример — такое именование ведь адекватно и прозрачно?

<?php
define("M", 7);
define("N", 9);
for($m = 1; $m <= M; $m++ ) {
    for($n = 1; $n <= N; $n++) {
    $arr[$m][$n] = rand(-21, 35);
    }
}
foreach($arr as $m => $outerValue) {
    foreach($outerValue as $n => $innerValue) {
        echo "значение массива [$m][$n] = ", $innerValue, "<br>";
    }
}
?>
melisa's picture

Тут момент субъективный. Кто-то может понять, кто-то нет. Задача - назвать так, чтобы поняли ВСЕ)) Это целая наука). Так что придерживайтесь правила

имя переменной должно отвечать на вопрос "Что в ней лежит", а метода - "Что он делает"

и совершенствуйтесь с удовольствием)

melisa's picture

принято