Используйте DateTime, его метод добавления с DateInterval.
<?php
$a = '[
{"duration":"00:01:46"},
{"duration":"00:01:23"},
{"duration":"00:01:56"},
{"duration":"00:03:20"},
{"duration":"00:05:41"},
{"duration":"00:02:08"}
]';
$b = '[
{"duration":"00:01:32"},
{"duration":"00:03:31"},
{"duration":"00:05:56"},
{"duration":"00:03:56"},
{"duration":"00:03:47"},
{"duration":"00:03:38"},
{"duration":"00:02:26"}
]';
$dataA = json_decode($a);
$dataB = json_decode($b);
function sum(array $data): string {
$sum = new DateTime('00:00');
$start = new DateTime('00:00');
foreach ($data as $row) {
$parts = explode(':', $row->duration);
$start->add(new DateInterval(sprintf('PT%sH%sM%sS', $parts[0], $parts[1], $parts[2])));
}
return $start->diff($sum)->format('%H:%I:%S');
}
var_dump(sum($dataA));
var_dump(sum($dataB));
Вывод:
string(8) "00:16:14"
string(8) "00:24:46"
Примечание: вам нужно будет отображать также дни, если ваша продолжительность составляет более 24 часов .