Подскажите как проще сделать замену массивов в многомерном массиве.
Имеется конфиг из файла в формате JSON
,декодирую его и на выходе получаю вот такой массив.
Array
(
[name] => Tables conf
[databases] => Array
(
[0] => Array
(
[name] => DB1
[tables] => Array
(
[0] => Array
(
[name] => table1
)
[1] => Array
(
[name] => table2
)
[2] => Array
(
[name] => table3
)
)
)
)
)
А так же имеется новый конфиг вида:
Array
(
[databases] => Array
(
[0] => Array
(
[name] => DB1
[tables] => Array
(
[0] => Array
(
[tbl_name] => table1
)
[1] => Array
(
[tbl_name] => table2
)
[2] => Array
(
[tbl_name] => table3
)
)
)
[1] => Array
(
[name] => DB2
[tables] => Array
(
[0] => Array
(
[tbl_name] => table2
)
[1] => Array
(
[tbl_name] => table3
)
)
)
)
)
Как можно проще внедрить новый конфиг в старый при этом не перезаписывая весь старый, а только изменить какой то массив по ключу иди добавить новый, то есть весь DB1
к примеру заменить на новый DB1
или добавить DB2
.
Попробовал вот такой вариант,работает,хотелось бы узнать как можно сделать проще.
$config = $_POST['config'];
$filteredConfig = array_filter($config['databases'], function($val, $key){
return !empty($val['tables']);
}, ARRAY_FILTER_USE_BOTH);
$fileConfig = file_get_contents('conf/tables_config_vars.json');
$fileConfig = json_decode($fileConfig, true);
foreach($fileConfig['databases'] as $key => $val){
foreach($filteredConfig as $confKey => $confVal){
if($val['name'] == $confVal['name']){
unset($fileConfig['databases'][$key]);
$fileConfig['databases'][] = $confVal;
}
}
}
Как-то так:
function mergeConfig(array &$config, array $addConfig)
{
foreach ($addConfig as $key => $value) {
if (isset($config[$key]) && is_array($config[$key])) {
is_array($value)
? $this->mergeConfig($config[$key], $value)
: array_push($config[$key], $value);
} else {
$config[$key] = $value;
}
}
}
где $config - базовый и результирующий конфиг, к которому нужно подлить другой; $addConfig - конфиг, который нужно добавить
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Когда я беру рандомные значения из БД, они часто повторяютсяЧтобы это не происходило, я попытался заново брать значение, но это не помогает