<?php
$array1 = json_decode('[
{
"date":"2018-06-23",
"size":"L",
"type":"shoes",
"value_one":"66"
},
{
"date":"2018-06-23",
"size":"XL",
"type":"shirt",
"value_one":"43"
},
{
"date":"2018-06-23",
"size":"M",
"type":"Bag",
"value_one":"23"
}
]', true);
$array2 = json_decode(
'[
{
"date":"2018-06-23",
"size":"L",
"type":"shoes",
"value_two":"28"
},
{
"date":"2018-06-23",
"size":"XL",
"type":"shirt",
"value_two":"56"
},
{
"date":"2018-06-23",
"size":"M",
"type":"Bag",
"value_two":"14"
},
{
"date":"2018-06-23",
"size":"S",
"type":"Cap",
"value_two":"29"
}
]', true);
$defaults = array_fill_keys(['date', 'size', 'type', 'value_one', 'value_two'], null);
$result = [];
foreach (array_merge($array1, $array2) as $row) {
$compositeKey = implode('_', array_slice($row, 0, 3));
$result[$compositeKey] = array_merge($result[$compositeKey] ?? $defaults, $row);
}
var_export(array_values($result));
- Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.26, 8.4.1 - 8.4.13
- array (
0 =>
array (
'date' => '2018-06-23',
'size' => 'L',
'type' => 'shoes',
'value_one' => '66',
'value_two' => '28',
),
1 =>
array (
'date' => '2018-06-23',
'size' => 'XL',
'type' => 'shirt',
'value_one' => '43',
'value_two' => '56',
),
2 =>
array (
'date' => '2018-06-23',
'size' => 'M',
'type' => 'Bag',
'value_one' => '23',
'value_two' => '14',
),
3 =>
array (
'date' => '2018-06-23',
'size' => 'S',
'type' => 'Cap',
'value_one' => NULL,
'value_two' => '29',
),
)
preferences:
65.98 ms | 408 KiB | 5 Q