3v4l.org

run code in 300+ PHP versions simultaneously
<?php $arr1 = [ ['email' => 'aa@gmail.com', 'name' => 'John Doe'], ['email' => 'bb@gmail.com', 'name' => 'Johnny Sins'], ['email' => 'cc@gmail.com', 'name' => 'Jose Alvarado'], ['email' => 'cc@gmail.com', 'name' => 'Jose Alvarado'] ]; $arr2 = [ ['email' => 'cc@gmail.com', 'country' => 'Japan'], ['email' => 'cc@gmail.com', 'country' => 'China'], ['email' => 'bb@gmail.com', 'country' => 'Korea'], ]; function sanitizeAndKey($array) { $found = []; $clean = []; foreach ($array as $row) { if (isset($found[$row['email']])) { unset($clean[$row['email']]); } else { $found[$row['email']] = $row; $clean[$row['email']] = $row; } } return $clean; } $result = sanitizeAndKey($arr1); foreach (sanitizeAndKey($arr2) as $key => $row) { $result[$key] = ($result[$key] ?? []) + $row; // append arr2 data to arr1 data } var_export(array_values($result));
Output for 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 ( 'email' => 'aa@gmail.com', 'name' => 'John Doe', ), 1 => array ( 'email' => 'bb@gmail.com', 'name' => 'Johnny Sins', 'country' => 'Korea', ), )

preferences:
93.59 ms | 407 KiB | 5 Q