Вы, вероятно, должны написать свою собственную функцию, которая выполняет замену так, как вам удобно Я думаю, что это должно:
- принять два массива ($ a, $ b) в качестве параметров
- , если $ a [KEY] является массивом, а $ b [KEY] не является установите, сохраняйте $ a [KEY]
- , если $ a [KEY] - массив, а $ b [KEY] - массив, вызывайте этот метод w / ($ a [KEY] & $ b [KEY] )
- если дети $ a НЕ являются массивами, а у $ b есть дети, замените $ a на $ b
или что-то в этом роде ... Мне было трудно понять, что именно вам нужно было, и при написании функции для нее были крайние случаи, которые, как я понял, могли возникнуть в более сложных массивах.
Итак, я написал эту функцию и тест. Я проверил его только с примерами массивов, которые вы дали, но он дает правильный вывод для них. Это может привести к ошибкам, если вы добавите другой слой в массив или если там есть массив, в котором есть несколько дочерних элементов, которые являются массивами, и некоторые дочерние элементы, которые не являются массивами.
<?php
function recurseReplace($a,$b){
$ret = [];
foreach ($a as $key=>$value){
if (!isset($b[$key])&&is_array($value)){
$ret[$key] = $value;
continue;
}
if (is_array($value)&&isset($b[$key])&&is_array($b[$key])){
$ret[$key] = recurseReplace($value,$b[$key]);
continue;
}
}
if (count($ret)==0){
foreach ($b as $key=>$value){
$ret[$key] = $value;
}
}
return $ret;
}
$a = [
"test" => [
"me"=>['test','me','now'],
"me2"=>["test",'me','now']
]
];
$b = [
"test" => [
"me2"=>["name"=>'firstname',"last"=>"lastname"]
]
];
$desired = [
"test" => [
"me"=>['test','me','now'],
"me2"=>["name"=>'firstname',"last"=>"lastname"]
]
];
$final = recurseReplace($a,$b);
echo "\n\n-----final output::---\n\n";
print_r($final);
echo "\n\n-----desired::---\n\n";
print_r($desired);