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