Как объединить ассоциативных массива по значению полей?

В 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.

Каждый из приведенных способов позволяет объединить ассоциативные массивы по значению полей. Выбор конкретного подхода зависит от контекста и требований к производительности и читабельности кода.