3v4l.org

run code in 500+ PHP versions simultaneously
<?php $startArr = json_decode('[ { "meterid": 23484, "expired_total": 1 }, { "meterid": 23489, "expired_total": 3 } ]', true); $expArr = json_decode('[ { "meterid": 23478, "start_total": 1 }, { "meterid": 23489, "start_total": 1 }, { "meterid": 23490, "start_total": 2 } ]', true); // $output_result { "23478": { "meterid": 23478, "start_total": 1, "expired_total": 0 }, "23484": { "meterid": 23484, "start_total": 0, "expired_total": 1 } "23489": { "meterid": 23489, "start_total": 1, "expired_total": 3 } "23490": { "meterid": 23490, "start_total": 2, "expired_total": 0 } } $result = []; $default = array_fill_keys(['meterid', 'start_total', 'expired_total'], 0); foreach (array_merge($startArr, $expArr) as $row) { if (!isset($result[$row['meterid']])) { $result[$row['meterid']] = array_replace($default, $row); } else { $result[$row['meterid']] += $row; } } var_export($result);
Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.21, 8.5.0 - 8.5.7
array ( 23484 => array ( 'meterid' => 23484, 'start_total' => 0, 'expired_total' => 1, ), 23489 => array ( 'meterid' => 23489, 'start_total' => 0, 'expired_total' => 3, ), 23478 => array ( 'meterid' => 23478, 'start_total' => 1, 'expired_total' => 0, ), 23490 => array ( 'meterid' => 23490, 'start_total' => 2, 'expired_total' => 0, ), )

preferences:
101.06 ms | 1326 KiB | 4 Q