3v4l.org

run code in 300+ PHP versions simultaneously
<?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