Вывод средней арифметической значений массива "getAverage" в php
Приведённый синтаксис взят с видеоурока на youtube.com ( https://www.youtube.com/watch?v=Q6MG...JTCS1XGTNkhTch ), где рассматривался вопрос о расчёте и выводе средней арифметической всех значений массива...
Проблема: средняя арифметическая при составлении данного синтаксиса изначально не была правильно рассчитана "машинкой/браузером... (или кто там в моём ПК эти математические расчёты производит я не знаю)" (кстати, настоящую среднюю арифметическую я отдельно проверил с помощью обычного калькулятора)!!! Но почему-то стоит только закоментировать строку с присвоением значения "0" переменной "$sum" - результат средней арифметической тут же корректируется на правильный, но при этом браузер начинает ругаться, мол, переменная "$sum" неприсвоенная. Ну а чтобы "заткнуть" браузер, мне пришлось применить знак "@" в строке, следующей после единственной закоментированной здесь, что не есть правильно с точки зрения программирования! :-((( В ЧЁМ МОЯ ОШИБКА?... ЧТО Я ДЕЛАЮ НЕ ТАК??? <?php function getAverage ($array) { foreach ($array as $key => $value) { // $sum = 0; @$sum = $sum + $value; echo $key."<br>"; } return $sum / count ($array); } echo getAverage (array ("first" => 12, "sec" => 45, "third" => 23, "forth" => 55)); ?> |
Я вам уже ответил, что данная функция, это бесполезная трата времени, изучайте лучше стандартные функции языка для работы с массивами, так как они в дальнейшем очень облегчат жизнь при работе с массивами данных.
Ваша ошибка в том, что переменной $sum в начале каждой итерации присваивается значение 0, а значит последним ее значением будет значение последнего элемента массива. А то что собакой прибито, есть правильное действие, хотя записывается оно и короче: $sum += $value; Почему выдает сообщение парсер я уже писал, и что нужно делать, что не было предупреждений. |
очередное уточнение
Цитата:
Момент № 1, на который я сразу хотел бы обратить Ваше внимание: Так, у этого хохляцкого (предположительно) долбоящера тоже было написано "$sum += $value;"... Я сначала повторил за ним и у меня то же самое получилось:((( Зачем усложнять всё то, что и так сложнее некуда? |
Цитата:
|
Цитата:
"first" => 12 "sec" => 45 "third" => 23 "forth" => 55 Тогда последнее значение у меня "55". А причём здесь тогда результат, который у меня выводится при присвоении значения "0" переменной "sum"??? |
Что тут сложного для понимания, если все написано явно:
foreach(...) { $sum = 0; $sum = $sum + $value; } Чему $sum буде равна в итоге? 55/4 |
Ответ на ответ
Я всё равно ничего не понял!
Ладно... С другой стороны подойдём к вопросу: Как бы Вы составили всю эту хрень (синтаксис, код или как его там) для расчёта средней арифметической элементов данного массива? ТОЛЬКО ПОПРОШУ С ПОДРОБНЫМИ ПОЯСНЕНИЯМИ...... |
Цитата:
Вопрос не затрагивающий циклов: $a = 0; $b = 2: $a = $a + $b; чему будет равна $a и почему? Теперь касаемо циклов: Дана комната, в корой на полке лежат шарики. Вам разрешили забрать их все, но с условием - за один раз можно взять один шарик, то есть входить за каждым отдельно, а для хранения взятых шариков использовать карман. Судя по вашему коду, вы бы поступили так: 1) Заходите в комнату. 2) Выворачиваете карман, опустошая его. 3) Берете шарик и кладете его в карман. 4) Выходите из комнаты. и т.д. пока в комнате не закончатся шарики. Вопрос - сколько в итоге шариков вы вынесете из комнаты таким способом? |
Ответ на ответ
Цитата:
уверен) 2. Ну смотря сколько этих шариков в комнате... Ну или пока не устану (если иное не оговорено условием конечно) :))) Но я ещё никак не могу понять связь между этой загадкой и тем синтаксисом, который здесь привёл первоначально!:((( 3. Ну так, какой синтаксис Вы бы использовали для расчёта средней арифметической значений того самого массива всё-таки??? |
Цитата:
Не важно сколько шариков, вынесете вы таким способом всего один! Как можно вынести больше, если первое, что вы делаете зайдя в комнату, это выворачиваете карман, тем самым выбрасывая ранее взятый шарик. Каждый раз выходя из комнаты, вы выносите по одному шарику. А чтобы забрать все, пиджак с карманом должен висеть вне комнаты - зашли, взяли шарик, вынесли его, положили в карман пиджака, пошли за следующим. Вот тогда можно вынести все. Так же и в циклах - если переменная должна хранить сумму, произведение и прочее, то она инициализируется вне цикла, до него, один раз. Вот что у вас: foreach ($array as $key => $value) { $sum = 0; //каждый раз при каждой итерации вы обнуляете переменную (выворачиваете свой карман) sum = $sum + $value; //затем к нулю прибавляете значение текущей итерации, то есть предыдущих значений нет } $sum = 0; //инициализировали переменную (пиджак с карманом вне команты) foreach ($array as $key => $value) { $sum = $sum + $value; //теперь к $sum хранящей сумму прибавляется текущее значение } РНР выдавало предупреждение, что переменная $sum у вас не инициализирована, но это не является ошибкой, РНР будет использовать с первоначальным значением null. |
Часовой пояс GMT +3, время: 16:29. |