Error 404
Продвинутый
Дата регистрации:
28.07.2013 16:04:47
Сообщений: 48
Добрый день. Михаил, из Вашего курса по php и mysql о двумерных массивах, Вы, по мимо основного задания, рекомендовали написать скрипт который бы считал среднее арифметическое число двумерного массива, вот что у меня получилось:
function arifIntDoubleArray($array){
for($i = 0; $i < count($array); $i++){
for($j = 0; $j < count($array[$i]); $j++){
// Подчет суммы всех чисел во вложенных массивах
$sum += $array[$i][$j];
// Количество итерации цикла
$count += count($array[$i][$j]);
if($i + 1 == count($array) && $j + 1 == count($array[$i]))
// Деление суммы всех чисел на количество итерации раз вложенного цикла
$sum = $sum / $count;
}
}
return $sum;
}
Все работает, но вот из-за того что $i и $j получают начальное значение 0 (чтобы перебирать массив начиная с индекса 0)
приходиться 1. создавать
// Количество итерации цикла
$count += count($array[$i][$j]);
для дальнейшего деления на него.
2.писать условие
if($i + 1 == count($array) && $j + 1 == count($array[$i]))
где к переменным $i и $j прибавлять 1, для того чтобы $i и $j были равны количеству длине массива.
Скажите, вот это вот все приветствуется или решается по другому? Если по другому, то как? Спасибо.
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Да, всё так. Разумеется, так как индексация у нас идет с нуля, нужно принимать меры и добавлять это смещение на единичку.
Error 404
Продвинутый
Дата регистрации:
28.07.2013 16:04:47
Сообщений: 48
И вот еще Вам вопрос. по окончанию первого раздела Вашего курса (основы) Вы даете задание написать функцию которая бы принимала массив с любыми числами и сортировала их, в зависимости от булевской переменой, по возрастанию или по убыванию. как это реализовать? дополнительных знаний точно не нужно применять? просто потратил уже более 4 часов думая как сделать это, но к сожалению так и не пришел к тому методу который бы мог осуществить данные действия над массивом.
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
А в чём именно тут сложность? С проверкой условия этой булевской переменной, я полагаю, проблем быть не должно. Остается просто сделать два варианта сортировки.
Error 404
Продвинутый
Дата регистрации:
28.07.2013 16:04:47
Сообщений: 48
Вот именно с сортировкой проблемы. 1 - это сохранять ли индексы. 2 - весь процесс сортировки должен происходить с одним циклом вложенный в другой, наверное так:
function sortArray($array, $boolean = true){
if($boolean == true){
for ($i = 0; $i < count($array); $i++){
for($j = 0; $j < count($array); $j++){
if(){
}else{
}
}
}
}
}
Что тогда должно быть в условии?
if($array[$i] > $array[$j]){
$array[$i] = $array[$j];
}
а массив выглядит допустим так:
$list = array(7,3,5,-2);
Тогда с тем условием что написано будет находить следующее меньшее число в цикле и записывать его на место предыдущего, то есть 7-ку поменяет на 3-ку сохраняя индекс. и отсюда вопрос, как в этом цикле, 2-м, перебрать весь массив, чтобы вместо 7-ки получи -2, то есть получили мы следующее меньшее число, оно бралось и проверялось на остальные значения массива? запускать еще один цикл? и куда передать значения, в моем случае, 7-ку? в новый массив? код писал тут и не тестировал его, надеюсь понятно.
Просмотрев 1 урок 2-го раздела смог не много понять принцип сортировки
function delRepeatElementArray($array){
if(is_array($array)){
foreach ($array as $k => $v) {
foreach ($array as $key => $value){
if($k != $key && $k < $key){
if($v == $value){
unset($array[$key]);
}
}
}
}
}else return false;
return $array;
}
но к сожалению это ничем не помогло решить проблему.
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Вот и разберитесь для начала просто с сортировкой. Пусть этот условный оператор запускает два совершенно разных метода сортировки, для начала.
Error 404
Продвинутый
Дата регистрации:
28.07.2013 16:04:47
Сообщений: 48
без рекурсии справится тут можно?
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Да, конечно.
WarBear
Новичок
Дата регистрации:
30.08.2016 12:57:55
Сообщений: 1
Среднее арифметическое двумерного массива:
$arr = array(array(11, 12, 13, 14, 15),
array(21, 22, 23, 24, 25),
array(31, 32, 33, 34, 35),
array(41, 42, 43, 44, 45),
array(51, 52, 53, 54, 55));
function arifmArray($arr) {
for ($i = 0; $i < count($arr) ; $i++) { //Перебираем массив первого уровня
$c+=count($arr[$i]);//Подсчёт количества элементов в массиве
for ($j = 0; $j < count($arr[$i]); $j++) { //Перебираем массив второго уровня
echo "Элемент $i$j ". $arr[$i][$j]." ";
$sum2 += $arr[$i][$j];// Подчет суммы всех чисел во вложенных массивах
}
echo "<table></table>";
}
$arifm = $sum2/$c;
echo "Количества элементов в массиве равно ".$c."<br />";//Kоличества элементов в массиве = 25
echo "Сумма всех чисел массива равна ".$sum2."<br />";//Сумма = 825
echo "Среднее арифметическое массива равно ".$arifm."<br />";
}
arifmArray($arr);
Сделал по своему. Надеюсь данное решение правильно?.