<?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