<?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));
preferences:
26.74 ms | 410 KiB | 5 Q