Когда мне нужно сделать это, я использую функцию, чтобы сначала отобразить значения одного массива по id:
function convertArrayToMap(&$list, $attribute='id') {
$result = array();
foreach ($list as &$item) {
if (is_array($item) && array_key_exists($attribute, $item)) {
$result[$item[$attribute]] = &$item;
}
}
return $result;
}
$map = convertArrayToMap($array1);
Затем выполните итерацию по другому массиву и присвойте значения:
foreach ($array2 AS $a2) {
$id = $a2['id'];
$map[$id]['new_key'] = $a2['value'];
}
Это в целом меньше циклов даже для одного прохода, и это удобно для дальнейших операций в будущем.