Задача №7. Задать массив из 7-ми элементов через предварительное описание типа, заполнить его случайными значениями в одном цикл
Primary tabs
Задача из этого списка.
<?php /* Задать массив из 7-ми элементов через предварительное описание типа, заполнить его * случайными значениями в одном цикле, а в другом цикле вывести эти значения на экран. */ function arr() { for($a = 7; $a > 0; $a--) { $array[] = rand(); } foreach($array as $elem) { echo $elem, '<br>'; } } arr(); ?>
- Log in to post comments
- 24706 reads
melisa
Thu, 06/21/2018 - 15:24
Permalink
замечания
Это:
и это:
- уже использование переменной $array. Предположим, тело цикла for по каким-то причинам не выполнилось ни разу и присвоение не произошло. Второй случай использования $array выдаст ошибку "Undefined variable".
Лучше заранее присвоить $array пустое значение, тогда ошибки не возникнет, заодно будет понятно, что в ней будет массив:
Sver4ok
Fri, 06/22/2018 - 16:16
Permalink
Разделил
melisa
Fri, 06/22/2018 - 16:27
Permalink
да, да, очень круто)
да, да, очень круто) с функциями.
а вот объявление массива не там. Вы объявили не тот массив.
и
это совершенно разные переменные. Почему?
Sver4ok
Fri, 06/22/2018 - 16:39
Permalink
Переделал
А, точно, нужно в функцию впихнуть же пустой массив, так?
melisa
Fri, 06/22/2018 - 16:45
Permalink
ни в коем случае)
ни в коем случае. Аргумент, принимаемый функцией обязательно должен нести какой-то смысл, а также он меняется от вызова к вызову.
Замечание об объявлении массива относилась к области видимости функции. Почитайте и ответьте всё таки на вопрос:
Sver4ok
Fri, 06/22/2018 - 16:52
Permalink
Я понимаю что разные
Я понимаю что разные переменные, потому что я по сути создаю опять переменную под этим же названием.
Типа такого? Но оно не работает так, $array не хочет выводится иначе в глобалку, не понимаю в чём дело)
melisa
Fri, 06/22/2018 - 16:57
Permalink
дело в области видимости
Дальше обсудим, что не работает.
Sver4ok
Fri, 06/22/2018 - 17:09
Permalink
1) прочитал, и до этого читал
1) прочитал, и до этого читал есессна.
2)Переименовал переменные
Всё работает, что тут не так?
melisa
Fri, 06/22/2018 - 17:19
Permalink
Ответьте, раз прочитали, на
Почему не выводился массив на экран?
Если бы так, то вопрос не возник бы.
Если так, то третий раз уже задаю вопрос:
Sver4ok
Fri, 06/22/2018 - 17:33
Permalink
Почему не выводился массив на
Изначально всё выводилось и в последней правке всё выводится, потому что я правильно всё сделал.
Потому что в
- записывает тот пустой массив.
А
- тут уже создаёт новый массив и присваивает значения из старого массива, как я понимаю.
melisa
Fri, 06/22/2018 - 18:26
Permalink
Потому что в
По Вашему вторая строка переопределяет $array из первой строки?
Sver4ok
Mon, 06/25/2018 - 22:31
Permalink
Мы друг друга видимо вообще
Мы друг друга видимо вообще не понимаем.
Объясню ход моих мыслей: вызывается функция, там создаётся локальная временная переменная - это значит создаётся кусок временной области памяти, в ней записывается этот массив array, далее return что-то делает с этой областью, потому как после return уже не существует этой переменной в функции. Тогда по логике return уничтожает эту переменную или "теряется", после того, как функция выведет эту переменную в глобальную переменную:
Если попытаться просто вывести
То функция сработает, однако эта переменная просто уничтожится после окончения функции и не выведется в глобальную переменную - некуда ей записываться будет.
melisa
Tue, 06/26/2018 - 12:22
Permalink
постараюсь понятнее пояснить
Вы словами правильно описываете локальные и глобальные переменные, а поименовали их не правильно:
В обоих функциях Вы одинаково назвали глобальные переменные (которые передаёте в функцию) и локальные (которые используете внутри функции). Для fillArrayWithRandomElements() и outputArray() это $array и $array2 соответственно. Хотя $array снаружи и $array внутри - это РАЗНЫЕ переменные. И $array2 снаружи и $array2 внутри - это РАЗНЫЕ переменные Вот это я от вас и хотела услышать.
Итак, в связи с этим, если Вам требуется передать массив в функцию, то его следует назвать отдельным именем, не совпадающим с именем локальной переменной внутри функции:
а ещё лучше избежать создания лишних переменных, передав fillArrayWithRandomElements() прямо в outputArray() как аргумент:
Вы вынесли объявление массива из функции наружу.
Это неверно. Если при повторном использовании функции, в неё будет передан, например, не пустой массив, то rand() добавит 7 элементов к уже имеющимся. Такое поведение функции задачей не предусмотрено. Никакой массив fillArrayWithRandomElements() принимать не должна.
Создание пустого массива должно происходить в самой функции (т.к. это потребуется при каждом её вызове):
Sver4ok
Tue, 06/26/2018 - 18:11
Permalink
И array2 снаружи и array2
Ну вот я сразу и сказал что это разные переменные, я имел ввиду что не разные по значению, а разные области памяти, то бишь 2 переменные, одна array и вторая array, а совмещается это всё благодаря области видимости это что вы скидывали.
Ну это да, я вчера понял что не туда всунул его, над в начале функции самой было.
Но почему отдельным именем? Я специально и создал под одним именем- удобно, глобальная и локальная переменные никак не пересекаются и не мешают же друг другу.
melisa
Tue, 06/26/2018 - 18:47
Permalink
Болтовня ничего не стоит. Покажите мне код
Я Вам чёткую задачу дала: дайте разным переменным разные имена. Вот здесь: http://fkn.ktu10.com/?q=comment/2514#com... Это нужно было для того, чтобы узнать, понимаете ли Вы, какие переменные разные, а какие - нет. Переименовали Вы неверно (см. мой предыдущий комментарий). Я не собираюсь обсуждать, что Вы думали и имелли ввиду:
Я тут с Вами переписываюсь
для того, чтобы Вы говорили "во-во, я так и говорил вообще"для того чтобы Вы материал освоили правильно, а не с неожиданным видинием.Читайте внимательно вопросы. Читайте внимательно замечания.
Принято, переходим к следующей задаче.