@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"  
	} 
}
  • Вопрос задан
  • 715 просмотров
Пригласить эксперта
Ответы на вопрос 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);
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы