Here is a solution that only includes repeating each array, which should significantly reduce processing time:
$a = array(
array('number' => 1, 'name' => 'Bob'),
array('number' => 2, 'name' => 'Sue'),
array('number' => 3, 'name' => 'Jim'),
array('number' => 4, 'name' => 'Cal'),
);
$b = array(
array('number' => 1, 'address' => 'Address 1A'),
array('number' => 1, 'address' => 'Address 1B'),
array('number' => 1, 'address' => 'Address 1C'),
array('number' => 2, 'address' => 'Address 2A'),
array('number' => 2, 'address' => 'Address 2B'),
array('number' => 4, 'address' => 'Address 4A'),
array('number' => 4, 'address' => 'Address 4B'),
array('number' => 4, 'address' => 'Address 4C'),
array('number' => 4, 'address' => 'Address 4D'),
array('number' => 4, 'address' => 'Address 4E'),
);
$c = array();
foreach ($b as $item) {
$key = $item['number'];
if (!array_key_exists($key, $c)) {
$c[$key] = array();
}
$c[$key][] = $item['address'];
}
foreach ($a as $index => $item) {
$key = $a[$index]['number'];
$a[$index]['addresses'] = $c[$key];
}
var_dump($a);
source
share