I have a two array based on my query;
The first array:
$payments = [
'IDR' => [
17 => '0.00'
18 => '100000.00'
19 => '400000.00'
]
]
Then this is the second array:
$advance = [
'IDR' => [
17 => '100000.00'
19 => '0.00'
]
'USD' => [
18 => '7.00'
]
]
I need to manipulate those array into the format like this :
$payments = [
'IDR' => '500000.00',
'USD' => '0'
]
$advance = [
'IDR' => '100000.00',
'USD' => '7.00'
]
So the final result is simple as like :
$result = [
'IDR' => '400000.00',
'USD' => '-7.00'
]
I think i need array_key_exist to check in each array have IDR and USD in payment also array_sum ?
Any advise it so appreciated.
Advertisement
Answer
First you’ll need to make sure you have a unique union of all keys available in both arrays:
$currencies = array_unique(array_merge(
array_keys($payments),
array_keys($advance)
));
With this in place you can now sum the values while iterating over each currency:
$result = [];
foreach ($currencies as $currency) {
// Note that a currency might not be available in either payment or advance,
// so we need to provide an empty array as fallback in each array_sum.
$payments[$currency] = array_sum($payments[$currency] ?? []);
$advance[$currency] = array_sum($advance[$currency] ?? []);
$result[$currency] = $payments[$currency] - $advance[$currency];
}
$payments, $advance and $result now contain your expected data.
Of course other loop structures such as array_map, array_walk, array_reduce are also possible. I just chose for foreach for the sake of readability.