Совместить 2 массива в один

176
19 апреля 2017, 14:27

Нужно совместить 2 массива в один таким образом чтобы в первом массиве были заменены только те ключи которые присутствуют в массиве 2 или добавлены.То есть нужно заменить DB1 и добавить DB4.DB 2 и 3 не трогать.Подскажите как лучше сделать.

Array1 = array(
    'databases' =>  array(
        array(
            'name' => 'DB1',
            'tables' => array(
                array('name' => 'table1'),
                array('name' => 'table2'),
                array('name' => 'table3'),
            )
        ),
        array(
            'name' => 'DB2',
            'tables' => array(
                array('name' => 'table1'),
                array('name' => 'table2'),
                array('name' => 'table3'),
            )
        ),
        array(
            'name' => 'DB3',
            'tables' => array(
                array('name' => 'table1'),
                array('name' => 'table2'),
                array('name' => 'table3'),
            )
        )
    )
);

Array2 = array(
    'databases' =>  array(
        array(
            'name' => 'DB1',
            'tables' => array(
                array('name' => 'table1'),
                array('name' => 'table2'),
                array('name' => 'table3'),
            )
        ),
        array(
            'name' => 'DB4',
            'tables' => array(
                array('name' => 'table1'),
                array('name' => 'table2'),
                array('name' => 'table3'),
            )
        ),
    )
);

foreach($fileConfig['databases'] as $key => $val){
    foreach($filteredConfig as $confKey => $confVal){
        if($val['name'] == $confVal['name']){
            $fileConfig['databases'][$key] = $confVal;
        } else{
            $fileConfig['databases'][] = $confVal;
        }
    }
}

Мой вариант не подошел так как кроме как замены массива происходит и добавление одних и тех же постоянно.Как контролировать существование уже данного ключа?

Придется действительно переделать массив чтобы ключами являлись имена бд и тогда применить

foreach($config2['databases'] as $db => $val){
            if(array_key_exists($db, $config['databases'])){
                $config['databases'][$db] = $val;
            }else{
                $config['databases'][$db][] = $val;
            }
        }
Answer 1

Возможно я не правильно интепретировал ваш вопрос Но если вам нужно слить два массива, с условием обновления значений при их сущестовании, то есть встроенная функция array_merge ( меняете последовательность параметров, что переписовался нужный массив ) Хочу отметить, что функция сравнивает сами значения, что вам собственно и нужно.

Структура то у вас одинаковаяя

Я девано решал подобную задачу с помощью данной функции. Так же обратите вние на функцию array_intersect_assoc Но мне кажется я вас гдето не допонял....

READ ALSO
Не сохраняются данные в MySQL [требует правки]

Не сохраняются данные в MySQL [требует правки]

Когда много информации то данные не сохраняются в БДПочему так может происходить?

212
PHP cookie удаляется раньше срока

PHP cookie удаляется раньше срока

Всем привет! Буду благодарен за пинокПосле логина создается сессия и cookie сроком 1 месяц setcookie 2592000

203
Как удалять куки при переходе на следующую страницу?

Как удалять куки при переходе на следующую страницу?

Здравствуйте, как как удалять куки при переходе на следующую страницу ? То есть мы зашли на страницу siteru/res?id=1 и сохранили id страницы (и сделали...

231
Не складываются маленькие числа

Не складываются маленькие числа

ЗдравствуйтеДело в том что нужно складывать маленькие числа, такие как 0

235