30.10.2018, 10:17
|
Аспирант
|
|
Регистрация: 07.10.2018
Сообщений: 75
|
|
Вывод средней арифметической значений массива "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));
?>
Последний раз редактировалось garrip91, 30.10.2018 в 10:24.
|
|
30.10.2018, 10:48
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Я вам уже ответил, что данная функция, это бесполезная трата времени, изучайте лучше стандартные функции языка для работы с массивами, так как они в дальнейшем очень облегчат жизнь при работе с массивами данных.
Ваша ошибка в том, что переменной $sum в начале каждой итерации присваивается значение 0, а значит последним ее значением будет значение последнего элемента массива. А то что собакой прибито, есть правильное действие, хотя записывается оно и короче:
$sum += $value;
Почему выдает сообщение парсер я уже писал, и что нужно делать, что не было предупреждений.
|
|
30.10.2018, 12:34
|
Аспирант
|
|
Регистрация: 07.10.2018
Сообщений: 75
|
|
очередное уточнение
Сообщение от laimas
|
Я вам уже ответил, что данная функция, это бесполезная трата времени, изучайте лучше стандартные функции языка для работы с массивами, так как они в дальнейшем очень облегчат жизнь при работе с массивами данных.
Ваша ошибка в том, что переменной $sum в начале каждой итерации присваивается значение 0, а значит последним ее значением будет значение последнего элемента массива. А то что собакой прибито, есть правильное действие, хотя записывается оно и короче:
$sum += $value;
Почему выдает сообщение парсер я уже писал, и что нужно делать, что не было предупреждений.
|
Теперь попытаюсь понять всё, что Вы мне написали......
Момент № 1, на который я сразу хотел бы обратить Ваше внимание:
Так, у этого хохляцкого (предположительно) долбоящера тоже было написано "$sum += $value;"... Я сначала повторил за ним и у меня то же самое получилось (( Зачем усложнять всё то, что и так сложнее некуда?
|
|
30.10.2018, 12:43
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от garrip91
|
Зачем усложнять всё
|
Это как раз упрощение, читайте, а не смотрите мультики, а уроки лучше на хороших онлайн ресурсах изучать, если нет книг.
|
|
30.10.2018, 18:16
|
Аспирант
|
|
Регистрация: 07.10.2018
Сообщений: 75
|
|
Сообщение от laimas
|
Ваша ошибка в том, что переменной $sum в начале каждой итерации присваивается значение 0, а значит последним ее значением будет значение последнего элемента массива. А то что собакой прибито, есть правильное действие, хотя записывается оно и короче:
$sum += $value;
|
Мои итерации вот так должны выглядеть образно, правильно?:
"first" => 12
"sec" => 45
"third" => 23
"forth" => 55
Тогда последнее значение у меня "55". А причём здесь тогда результат, который у меня выводится при присвоении значения "0" переменной "sum"???
|
|
31.10.2018, 03:00
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Что тут сложного для понимания, если все написано явно:
foreach(...) {
$sum = 0;
$sum = $sum + $value;
}
Чему $sum буде равна в итоге? 55/4
|
|
31.10.2018, 23:12
|
Аспирант
|
|
Регистрация: 07.10.2018
Сообщений: 75
|
|
Ответ на ответ
Я всё равно ничего не понял!
Ладно... С другой стороны подойдём к вопросу:
Как бы Вы составили всю эту хрень (синтаксис, код или как его там) для расчёта средней арифметической элементов данного массива?
ТОЛЬКО ПОПРОШУ С ПОДРОБНЫМИ ПОЯСНЕНИЯМИ......
|
|
01.11.2018, 00:44
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от garrip91
|
Как бы Вы составили всю эту хрень
|
Есть стандартная функция для расчета суммы элементов одномерного массива - array_sum, что и надо использовать, писать для этого самопальные функции нет смысла. Для того чтобы понять работу цикла не обязательно оборачивать его в "загадочные" функции, а для понимания конструкций языка нужно читать, ссылка на руководство давалась.
Вопрос не затрагивающий циклов:
$a = 0;
$b = 2:
$a = $a + $b;
чему будет равна $a и почему?
Теперь касаемо циклов:
Дана комната, в корой на полке лежат шарики.
Вам разрешили забрать их все, но с условием - за один раз можно взять один шарик, то есть входить за каждым отдельно, а для хранения взятых шариков использовать карман.
Судя по вашему коду, вы бы поступили так:
1) Заходите в комнату.
2) Выворачиваете карман, опустошая его.
3) Берете шарик и кладете его в карман.
4) Выходите из комнаты.
и т.д. пока в комнате не закончатся шарики.
Вопрос - сколько в итоге шариков вы вынесете из комнаты таким способом?
|
|
01.11.2018, 14:26
|
Аспирант
|
|
Регистрация: 07.10.2018
Сообщений: 75
|
|
Ответ на ответ
Сообщение от laimas
|
Есть стандартная функция для расчета суммы элементов одномерного массива - array_sum, что и надо использовать, писать для этого самопальные функции нет смысла. Для того чтобы понять работу цикла не обязательно оборачивать его в "загадочные" функции, а для понимания конструкций языка нужно читать, ссылка на руководство давалась.
Вопрос не затрагивающий циклов:
$a = 0;
$b = 2:
$a = $a + $b;
чему будет равна $a и почему?
Теперь касаемо циклов:
Дана комната, в корой на полке лежат шарики.
Вам разрешили забрать их все, но с условием - за один раз можно взять один шарик, то есть входить за каждым отдельно, а для хранения взятых шариков использовать карман.
Судя по вашему коду, вы бы поступили так:
1) Заходите в комнату.
2) Выворачиваете карман, опустошая его.
3) Берете шарик и кладете его в карман.
4) Выходите из комнаты.
и т.д. пока в комнате не закончатся шарики.
Вопрос - сколько в итоге шариков вы вынесете из комнаты таким способом?
|
1. $a будет равна 2, как я могу предположить(но опять же я в этом не
уверен)
2. Ну смотря сколько этих шариков в комнате...
Ну или пока не устану (если иное не оговорено условием конечно) ))
Но я ещё никак не могу понять связь между этой загадкой и тем синтаксисом, который здесь привёл первоначально! ((
3. Ну так, какой синтаксис Вы бы использовали для расчёта средней арифметической значений того самого массива всё-таки???
Последний раз редактировалось garrip91, 01.11.2018 в 14:30.
|
|
01.11.2018, 14:57
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от garrip91
|
я могу предположить(но опять же я в этом не
уверен)
Ну смотря сколько этих шариков в комнате.
|
Да, тяжелый случай, как же вы программировать собираетесь?
Не важно сколько шариков, вынесете вы таким способом всего один! Как можно вынести больше, если первое, что вы делаете зайдя в комнату, это выворачиваете карман, тем самым выбрасывая ранее взятый шарик. Каждый раз выходя из комнаты, вы выносите по одному шарику. А чтобы забрать все, пиджак с карманом должен висеть вне комнаты - зашли, взяли шарик, вынесли его, положили в карман пиджака, пошли за следующим. Вот тогда можно вынести все.
Так же и в циклах - если переменная должна хранить сумму, произведение и прочее, то она инициализируется вне цикла, до него, один раз. Вот что у вас:
foreach ($array as $key => $value) {
$sum = 0; //каждый раз при каждой итерации вы обнуляете переменную (выворачиваете свой карман)
sum = $sum + $value; //затем к нулю прибавляете значение текущей итерации, то есть предыдущих значений нет
}
$sum = 0; //инициализировали переменную (пиджак с карманом вне команты)
foreach ($array as $key => $value) {
$sum = $sum + $value; //теперь к $sum хранящей сумму прибавляется текущее значение
}
РНР выдавало предупреждение, что переменная $sum у вас не инициализирована, но это не является ошибкой, РНР будет использовать с первоначальным значением null.
|
|
|
|