В PHP для объединения ассоциативных массивов по значению полей можно использовать различные подходы. Рассмотрим несколько возможных решений.
1. Использование циклов:
$array1 = [ ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Alice'], ]; $array2 = [ ['id' => 1, 'age' => 25], ['id' => 2, 'age' => 30], ]; $mergedArray = []; foreach ($array1 as $item1) { foreach ($array2 as $item2) { if ($item1['id'] === $item2['id']) { $mergedArray[] = array_merge($item1, $item2); } } } var_dump($mergedArray);
В данном примере два ассоциативных массива $array1 и $array2 объединяются по полю 'id'. В результате получаем новый массив $mergedArray, содержащий объединенные элементы, у которых значения поля 'id' равны.
2. Использование функций array_filter и array_merge:
$array1 = [ ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Alice'], ]; $array2 = [ ['id' => 1, 'age' => 25], ['id' => 2, 'age' => 30], ]; $mergedArray = array_filter(array_map(function($item1) use ($array2) { $matchingItems = array_filter($array2, function($item2) use ($item1) { return $item2['id'] === $item1['id']; }); if (!empty($matchingItems)) { return array_merge($item1, reset($matchingItems)); } }, $array1)); var_dump($mergedArray);
В данном примере используется функция array_map для применения анонимной функции ко всем элементам массива $array1. Внутри анонимной функции проверяется совпадение значения поля 'id' между элементами $array1 и $array2 с помощью функции array_filter. Если найдено совпадение, то выполняется объединение элементов с помощью функции array_merge. Результат фильтруется с помощью функции array_filter, чтобы исключить элементы ассоциативного массива со значением null.
3. Использование функций array_reduce и array_search:
$array1 = [ ['id' => 1, 'name' => 'John'], ['id' => 2, 'name' => 'Alice'], ]; $array2 = [ ['id' => 1, 'age' => 25], ['id' => 2, 'age' => 30], ]; $mergedArray = array_reduce($array1, function($carry, $item1) use ($array2) { $matchingKey = array_search($item1['id'], array_column($array2, 'id')); if ($matchingKey !== false) { $carry[] = array_merge($item1, $array2[$matchingKey]); } return $carry; }, []); var_dump($mergedArray);
В данном примере используется функция array_reduce для свертки массива $array1 в одно значение. Внутри анонимной функции происходит поиск значения поля 'id' в массиве $array2 с помощью функции array_search и функции array_column. Если найдено совпадение, то выполняется объединение элементов с помощью функции array_merge.
Каждый из приведенных способов позволяет объединить ассоциативные массивы по значению полей. Выбор конкретного подхода зависит от контекста и требований к производительности и читабельности кода.