Это может быть односимвольное изменение:
foreach ($array1 as $defArr)
переходит на
foreach ($array1 as &$defArr)
# ^
Оператор ссылки &
указывает на исходный подмассив в цикле foreach
контекст, а не временная переменная.
Тем не менее, немного безопаснее использовать индекс явно:
foreach ($array1 as $i => $defArr) {
foreach ($array2 as $j => $dayArr) {
if ($dayArr['_id'] == $defArr['_id']) {
$array1[$i]['M'] = $array2[$j]['M'];
$array1[$i]['F'] = $array2[$j]['F'];
}
}
}
Если важна скорость или $array2
велика, временная сложность вашегоАлгоритм O (n * m).Я рекомендую хеширование $array2
для быстрого поиска следующим образом (O (n)):
$lookup = array_reduce($array2, function ($a, $e) {
$a[$e['_id']] = $e;
return $a;
});
foreach ($array1 as $i => $e) {
if (array_key_exists($e['_id'], $lookup)) {
$array1[$i]['M'] = $lookup[$e['_id']]['M'];
$array1[$i]['F'] = $lookup[$e['_id']]['F'];
}
}
Попробуйте!