| 
	| 
	
	| 
		
	| 
			
			 
			
				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.
			
			
	
			
			
			
			
			
				  |  |  |  |