我需要合并这两个数组($array1
中的$array2
):
$array1 = array(
'data' => array(
array(
'raw' => array(
'key1' => array('value1', 'value1_1'),
'key3' => 'value3',
),
),
array(
'raw' => array(
'key1' => array('value10', 'value10_1'),
'key3' => 'value30',
),
),
...
),
);
$array2 = array(
'data' => array(
array(
'raw' => array(
'key1' => 'value1_2',
'key2' => 'value2',
)
)
)
);
预期结果:
array(
'data' => array(
array(
'raw' => array(
'key1' => array('value1', 'value1_1', 'value1_2'),
'key2' => 'value2',
'key3' => 'value3',
),
),
array(
'raw' => array(
'key1' => array('value10', 'value10_1'),
'key3' => 'value30',
),
),
),
);
当我使用 array_merge_recursive 时将 $array2
合并到 $array1['data'][0]
中,我得到了以下结果:
$array1 = array(
'data' => array(
array(
'raw' => array(
'key1' => array('value1', 'value1_1'),
'key3' => 'value3',
),
),
array(
'raw' => array(
'key1' => array('value10', 'value10_1'),
'key3' => 'value30',
),
),
array(
'raw' => array(
'key1' => 'value1_2',
'key2' => 'value2',
)
)
),
);
当我使用 array_replace_recursive 时,我得到了以下结果:
$array1 = array(
'data' => array(
array(
'raw' => array(
'key1' => 'value1_2',
'key2' => 'value2',
'key3' => 'value3',
),
),
array(
'raw' => array(
'key1' => array('value10', 'value10_1'),
'key3' => 'value30',
),
),
),
);
我正在寻找获得预期结果的最简单方法。
数组可以有一个未知的 deph 数据结构,它可以有一个以上的索引子数组。看来我需要 array_merge_recursive
和 array_replace_recursive
非常感谢您的回答:)
最佳答案
首先需要做一些准备,以清除不需要的索引子数组。
代码:(Demo)
$array1['data']=current($array1['data']); // repair
$array2['data']=current($array2['data']); // repair
var_export(array_merge_recursive($array1, $array2)); // merge as intended
输出:
array (
'data' =>
array (
'raw' =>
array (
'key1' =>
array (
0 => 'value1',
1 => 'value1_1',
2 => 'value1_2',
),
'key3' => 'value3',
'key2' => 'value2',
),
),
)
问题更新后表达更复杂的数据结构...
代码:(Demo)
foreach ($array1['data'] as $set) {
foreach ($set['raw'] as $k => $v) {
if (!isset($result['data']['raw'][$k])) {
$result['data']['raw'][$k] = $v;
}else {
$result['data']['raw'][$k] = array_merge((array)$result['data']['raw'][$k],(array)$v);
}
}
}
foreach ($array2['data'] as $set) {
foreach ($set['raw'] as $k => $v) {
if (!isset($result['data']['raw'][$k])) {
$result['data']['raw'][$k] = $v;
}else{
$result['data']['raw'][$k] = array_merge((array)$result['data']['raw'][$k],(array)$v);
}
}
}
var_export($result);
关于php - 递归添加元素到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50371181/