Array (
[0] => Array (
[amount_paid] => 2050.00
)
[1] => Array (
[amount_paid] => 2050.00
)
[2] => Array (
[amount_paid] => 2050.00
)
[3] => Array (
[amount_paid] => 2050.00
)
[4] => Array (
[amount_paid] => 2050.00
)
[5] => Array (
[amount_paid] => 2050.00
)
[6] => Array (
[amount_paid] => 2050.00
)
[7] => Array (
[amount_paid] => 2050.00
)
[8] => Array (
[amount_paid] => 2050.00
)
[9] => Array (
[amount_paid] => 2050.00
)
[10] => Array (
[amount_paid] => 2050.00
)
[11] => Array (
[amount_paid] => 2050.00
)
[12] => Array (
[amount_paid] => 2050.00
)
[13] => Array (
[amount_paid] => 2050.00
)
)
I have this example of array in php. I want to sum up every 10 paid amount.
Example is sum index 0-9 , 10 - 19 and so on
What I tried is only for first 10 and I cant think how to handle for every 10 with dynamic number
for ($i = 0; $i < count($json); $i++) {
if ($i < 10) {
$subtotalamount += floatval($json[$i]['amount_paid']);
}
}
Short solution with range
, array_slice
and array_column
functions:
// $arr is your initial array
$sub_totals = [];
foreach(range(0, count($arr), 10) as $k){
$sub_totals[] = array_sum(array_column(array_slice($arr, $k, 10), 'amount_paid'));
}
range(0, count($arr), 10)
- generate an array containing a range of elements. It would be as [0, 10, 20]
. Those elements are boundaries for each 10-sized sequence
array_slice($arr, $k, 10)
- each next boundary $k
is used for extracting next 10-sized sequence/slice from the initial array $arr
$ret = array();
$subtotalamount = 0;
for ($i = 0; $i < count($json); $i++) {
$subtotalamount += floatval($json[$i]['amount_paid']);
if ($i % 10 == 9) {
$ret[] = $subtotalamount;
$subtotalamount = 0;
}
}
if ($subtotalamount > 0) {
$ret[] = $subtotalamount;
}
Easy to understand,You can use array_chunk(),array_sum(),array_column() like below:-
$new_array = array_chunk($array,10);
$sub_total_array = [];
foreach($new_array as $array){
$sub_total_array[] = array_sum(array_column($array,'amount_paid'));
}
print_r($sub_total_array);
try this,
$sumofall = array();
for ($i = 0; $i < count($json); $i++) {
if ($i % 10 == 0) {
$sumofeach = 0
for ($j=$i-10;$j<$i-1;$j++) {
$sumofeach += floatval($json[$i]['amount_paid']);
$sumofall[] = $sumofeach
}
}
$a = array (0 => array ( 'amount_paid' => 2050.00 ), 1 => array ( 'amount_paid' => 2050.00 ) , 2 => array ( 'amount_paid' => 2050.00 ) , 3 => array ( 'amount_paid' => 2050.00 ) , 4 => array ( 'amount_paid' => 2050.00 ) , 5 => array ( 'amount_paid' => 2050.00 ) , 6 => array ( 'amount_paid' => 2050.00 ) , 7 => array ( 'amount_paid' => 2050.00 ) , 8 => array ( 'amount_paid' => 2050.00 ) , 9 => array ( 'amount_paid' => 2050.00 ) , 10 => array ( 'amount_paid' => 2050.00 ) , 11 => array ( 'amount_paid' => 2050.00 ) , 12 => array ( 'amount_paid' => 2050.00 ) , 13 => array ( 'amount_paid' => 2050.00 ) ) ;
$b = array_column($a,'amount_paid');
$c = array_chunk($b,10);
$sum = [];
foreach($c as $arr){
$sum[] = array_sum($arr);
}
echo "sum = ";
print_r($sum);