@Triglav77

Сложить каждый 5 элемент в массиве?

Есть массив с данными

array(12) 
{   
	[0]=>   array(4) 
	{     
		["id"]=>     string(2) "86"     
		["amount"]=>     string(2) "19"  
	}   
	[1]=>   array(4) 
	{     
		["id"]=>     string(2) "87"  
		["amount"]=>     string(2) "21"  
	}   
	[2]=>   array(4) 
	{     
		["id"]=>     string(2) "88"   
		["amount"]=>     string(2) "22"
	}   
	[3]=>   array(4) 
	{     
		["id"]=>     string(2) "89"   
		["amount"]=>     string(2) "23"  
	}   
	[4]=>   array(4) 
	{     
		["id"]=>     string(2) "90"    
		["amount"]=>     string(2) "24"  
	}   
	[5]=>   array(4) 
	{     
		["id"]=>     string(2) "91"    
		["amount"]=>     string(2) "25"   
	}   
	[6]=>   array(4) 
	{     
		["id"]=>     string(2) "92"   
		["amount"]=>     string(2) "26"
	}   
	[7]=>   array(4) 
	{     
		["id"]=>     string(2) "93"    
		["amount"]=>     string(2) "27"  
		}   
	[8]=>   array(4) 
	{     
		["id"]=>     string(2) "94"     
		["amount"]=>     string(2) "28"  
	}   
	[9]=>   array(4) 
	{     
		["id"]=>     string(2) "95"    
		["amount"]=>     string(2) "29"   
	}   
	[10]=>   array(4) 
	{     
		["id"]=>     string(2) "96"    
		["amount"]=>     string(2) "30" 
	}   
	[11]=>   array(4) 
	{     
		["id"]=>     string(2) "97"    
		["amount"]=>     string(2) "31"  
	} 
}


нужно просуммировать каждый пятый элемент ["amount"]. Причем массив может быть достаточно большим.

т.е. должно получиться
array() 
{   
	[0]=>   array(4) 
	{
		["amount1"]=>     string(2) "45"  
	}  
	[1]=>   array(4) 
	{
		["amount2"]=>     string(2) "48"  
	} 
	[2]=>   array(4) 
	{
		["amount3"]=>     string(2) "50"  
	} 
	[3]=>   array(4) 
	{
		["amount4"]=>     string(2) "52"  
	} 
	[4]=>   array(4) 
	{
		["amount5"]=>     string(2) "54"  
	} 
	[5]=>   array(4) 
	{
		["amount6"]=>     string(2) "56"  
	} 
}
  • Вопрос задан
  • 696 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Aricus
Примерно так. Не проверял, так что могут быть ошибки. Забавная задачка, хоть и простая.
foreach ($arr as $i => $el) {
	if (isset($arr[$i+5]) {
		$iw = $i;
		while(isset($arr[$iw]) {
			$res[$i] += $el['amount'];
			$iw += 5;
		}
	}
}
Ответ написан
Stalker_RED
@Stalker_RED
$data = [19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31];
$result = [];

foreach($data as $n => $value) {
	$n = ($n % 6) + 1;
	$result["amount$n"] += $value;
}

var_export($result);

работающий пример: ideone.com/K772fo

И у вас в заголовке неправда - судя по "должно получиться" таки не пятый, а шестой.
Впрочем, если нужно именно пятый, просто поменяйте 6 на 5.
Ответ написан
@hodakovskiy
не проверял но как то так
$num = 0;
foreach ($arr as $data) {
    foreach ($data["amount"] as $j => $el_amount) {
        if($j+1 % 5 == 0) {
          $amount_num = "amount".$num++;
           $new_arr[][$amount_num] = $el_amount;
        }
    }
  }
}
print_r($new_arr);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 55 000 до 80 000 руб.
WACDAQ Москва
от 120 000 руб.
Paxport Москва
от 140 000 до 190 000 руб.
19 авг. 2019, в 04:32
25000 руб./за проект
19 авг. 2019, в 01:32
3000 руб./за проект
18 авг. 2019, в 22:47
35000 руб./за проект