我尝试用**array_merge()将两个数组数据相加。它只是附加到后面。但是较低的级别被忽略。
有没有替代array_merge()**的方法可以合并user
值而不复制color
值?
现有阵列数据:
$existingtArr = [
"A" => [
"color" => 'red',
"user" => [
"Daniel" => ["01:18:08", "04:10:12"],
"Max" => ["01:04:00"],
"Serto" => ["02:00:02"],
]
],
"B" => [
"color" => 'blue',
"user" => [
"Franz" => ["08:40:52"],
"Hugo" => ["07:08:58"],
]
]
];
新阵列数据:
$newArr = [
"A" => [
"color" => 'red',
"user" => [
"Fabian" => ["06:03:00"], // + 1 user
"Max" => ["04:10:12"], // + 1 new time
"Serto" => ["02:00:02"],
]
],
"B" => [
"color" => 'blue',
"user" => [
"Franz" => ["08:40:52", "14:05:32", "20:34:15"], // an older one is available, + 2 new times
"Hugo" => ["04:10:12"], // + 1 time
]
],
"C" => [ // + new whole group
"color" => 'green',
"user" => [
"Maxi" => ["07:08:58", "04:10:12"],
]
]
];
用新数据补充现有数据:
echo '<pre>';
print_r(array_merge($existingtArr, $newArr));
echo '</pre>';
预期结果数组数据:
$resultArr = [
"A" => [
"color" => 'red',
"user" => [
"Daniel" => ["01:18:08", "04:10:12"],
"Fabian" => ["06:03:00"],
"Max" => ["01:04:00", "04:10:12"],
"Serto" => ["02:00:02"],
]
],
"B" => [
"color" => 'blue',
"user" => [
"Franz" => ["08:40:52", "14:05:32", "20:34:15"],
"Hugo" => ["07:08:58", "04:10:12"],
]
],
"C" => [
"color" => 'green',
"user" => [
"Maxi" => ["07:08:58", "04:10:12"],
]
]
];
1条答案
按热度按时间iaqfqrcu1#
您不能简单地对整个数据集调用
array_merge_recursive()
,因为它们将生成重复的颜色值,但您希望颜色值保持单一,并递归合并用户数据。为了适应这种逻辑(假设可以用
$newArr
中的数据简单地改变$existingtArr
数组),检查每个字母集是否存在,然后为不存在的字母推送整个集合,或者递归地合并共享的字母集。代码:(Demo)