У меня есть следующие 2 массива:

$a = [ 'post_type' => 'ese' ];
$b = [ 'demo_handle' => 'demo-3', 'post_type' => [ 'aaa', 'bbb' ], 'id' => 3'];

Я бы хотел, чтобы $b "принял" значения $a, но не наоборот. Мой последний массив будет выглядеть так:

$c = [ ..., 'post_type' => [ 'aaa, 'bbb', 'ese'], ...];

Как я могу этого добиться? Я пробовал несколько методов, но ни один из них не работает правильно array_merge.

1
coolpasta 8 Окт 2018 в 20:39

2 ответа

Лучший ответ

Используйте цикл с функцией isset(). Подробнее в комментариях к коду ниже:

// Loop over the $b array
foreach ($b as $key => $value) {

    // Check if this key exists in $a array also
    if (isset($a[$key])) {

        // if exists, we can merge them 
        // We need to typecast value in $a to array 
        // since, array_merge requires array arguments
        $b[$key] = array_merge((array)$value, 
                               (array)$a[$key]);
    }
}

Rextester DEMO

2
Madhur Bhaiya 8 Окт 2018 в 17:51

В PHP есть функция, называемая array_merge_recursive:

$c = array_merge_recursive($a, $b);
2
Nathan 8 Окт 2018 в 17:45