PHP вычисляет сумму вложенного массива

Привет у меня есть этот пример массива. Я хотел вычислить для общего количества областей, а затем добавить его к родительскому итогу плюс индивидуальный итог местоположения. Таким образом, общее значение первого местоположения будет равно «11», потому что 7 + 4. Тогда родитель «State» будет делать то же самое, поэтому 10 (1-й родительский элемент) + 11 (1-й дочерний элемент) + 10 (2-й дочерний элемент) = 31.

    $arr = array(
array(
'type' => 'state', 'total' => '10',
'location' => array(
array(
'type' => 'location', 'total' => '4',
'area' => array(
array('type' => 'area', 'total' => '6'),
array('type' => 'area', 'total' => '1')
)
),
array(
'type' => 'location', 'total' => '5',
'area' => array(
array('type' => 'area', 'total' => '2'),
array('type' => 'area', 'total' => '3')
)
)
)
),

array(
'type' => 'state', 'total' => '20',
'location' => array(
array(
'type' => 'location', 'total' => '4',
'area' => array(
array('type' => 'area', 'total' => '8'),
array('type' => 'area', 'total' => '7')
)
)
)
)
);

Нужный правильный вывод теперь должен быть воссоздан как:

    $arr_FINAL = array(
array(
'type' => 'state', 'total' => '31',
'location' => array(
array(
'type' => 'location', 'total' => '11',
'area' => array(
array('type' => 'area', 'total' => '6'),
array('type' => 'area', 'total' => '1')
)
),
array(
'type' => 'location', 'total' => '10',
'area' => array(
array('type' => 'area', 'total' => '2'),
array('type' => 'area', 'total' => '3')
)
)
)
),

array(
'type' => 'state', 'total' => '39',
'location' => array(
array(
'type' => 'location', 'total' => '19',
'area' => array(
array('type' => 'area', 'total' => '8'),
array('type' => 'area', 'total' => '7')
)
)
)
)
);

Текущее незаконченное решение согласно запросу CBroe:

        // country > state > location > area
foreach ($arr as $k => $v) {
foreach ($v['location'] as $k2 => $v2) {
foreach ($v2['area'] as $k3 => $v3) {
echo $v3['total'] . ",";
$ctr_area[] = $v3['total'];

}
$arr2[$k]['location'][$k2]['total'] += array_sum($ctr_area);
$ctr_location[] = $v2['total'];
$ctr_area = array();
}
$arr2[$k]['total'] += array_sum($ctr_location);

$ctr_state[] = $v['total'];
$ctr_location = array();
}

-3

Решение

попробуй это:

for($i = 0; $i < count($arr); $i++){
$state_total = $arr[$i]["total"];
for($j = 0; $j < count($arr[$i]['location']); $j++){
$location_total = $arr[$i]['location'][$j]["total"];
for($k = 0; $k < count($arr[$i]['location'][$j]['area']); $k++){
if(isset($arr[$i]['location'][$j]['area'][$k])){
$location_total = $location_total + $arr[$i]['location'][$j]['area'][$k]['total'];
}
}
$arr[$i]['location'][$j]["total"] = $location_total;
$state_total = $state_total + $location_total;
}
$arr[$i]["total"] = $state_total;
}

Надеюсь, поможет.

2

Другие решения

Кредиты Гопалу (Спасибо, приятель). Просто сделал простой пересмотр ответа @ Gopalkrishna с форматированием:

введите описание изображения здесь

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector