php合并两个动态递归数组
例如,我基于路径(字符串)动态创建了两个数组 第一个数组如下所示:php合并两个动态递归数组,php,arrays,Php,Arrays,例如,我基于路径(字符串)动态创建了两个数组 第一个数组如下所示: array ( 2009 => array ( '08' => array ( 0 => 'doc3', 1 => 'doc4', 2 => 'doc5', ), ), 2010 => array ( '01' => array ( 0 => 'doc6',
array (
2009 =>
array (
'08' =>
array (
0 => 'doc3',
1 => 'doc4',
2 => 'doc5',
),
),
2010 =>
array (
'01' =>
array (
0 => 'doc6',
1 => 'doc7',
),
),
)
array (
2009 =>
array (
'08' =>
array (
0 => 'doc1',
1 => 'doc2',
),
),
)
array (
0 =>
array (
'08' =>
array (
0 => 'doc1',
1 => 'doc2',
),
),
1 =>
array (
'08' =>
array (
0 => 'doc3',
1 => 'doc4',
2 => 'doc5',
),
),
2 =>
array (
'01' =>
array (
0 => 'doc6',
1 => 'doc7',
),
),
)
第二个数组如下所示:
array (
2009 =>
array (
'08' =>
array (
0 => 'doc3',
1 => 'doc4',
2 => 'doc5',
),
),
2010 =>
array (
'01' =>
array (
0 => 'doc6',
1 => 'doc7',
),
),
)
array (
2009 =>
array (
'08' =>
array (
0 => 'doc1',
1 => 'doc2',
),
),
)
array (
0 =>
array (
'08' =>
array (
0 => 'doc1',
1 => 'doc2',
),
),
1 =>
array (
'08' =>
array (
0 => 'doc3',
1 => 'doc4',
2 => 'doc5',
),
),
2 =>
array (
'01' =>
array (
0 => 'doc6',
1 => 'doc7',
),
),
)
现在我想把这两个数组合并到这个:
array (
2009 =>
array (
'08' =>
array (
0 => 'doc1',
1 => 'doc2',
2 => 'doc3',
3 => 'doc4',
4 => 'doc5',
),
),
2010 =>
array (
'01' =>
array (
0 => 'doc6',
1 => 'doc7',
),
),
)
最大的问题是,数组是动态的。例如,第一个阵列可以有4层深,第二个阵列可以有7层深。
这是因为我根据存储在数据库中的路径/字符串创建数组。不应该有最大值
要创建数组,我使用这个
我使用以下代码从示例中创建阵列:
$data_text_1 = [];
$data_text_2 = [];
$propertyAccessor = PropertyAccess::createPropertyAccessor();
$propertyAccessor->setValue($data_text_1, '[2009][08]', ['doc1', 'doc2']);
$propertyAccessor->setValue($data_text_2, '[2009][08]', ['doc3', 'doc4', 'doc5']);
$propertyAccessor->setValue($data_text_2, '[2010][01]', ['doc6', 'doc7']);
有人能帮我吗
编辑:
我已经尝试过数组合并递归。使用array\u merge\u recursive后,我的数组如下所示:
array (
2009 =>
array (
'08' =>
array (
0 => 'doc3',
1 => 'doc4',
2 => 'doc5',
),
),
2010 =>
array (
'01' =>
array (
0 => 'doc6',
1 => 'doc7',
),
),
)
array (
2009 =>
array (
'08' =>
array (
0 => 'doc1',
1 => 'doc2',
),
),
)
array (
0 =>
array (
'08' =>
array (
0 => 'doc1',
1 => 'doc2',
),
),
1 =>
array (
'08' =>
array (
0 => 'doc3',
1 => 'doc4',
2 => 'doc5',
),
),
2 =>
array (
'01' =>
array (
0 => 'doc6',
1 => 'doc7',
),
),
)
编辑2@misorude
以下是要合并的阵列:
array (
2009 =>
array (
'08' =>
array (
0 => 'doc1',
1 => 'doc2',
),
),
)
array (
2009 =>
array (
'08' =>
array (
'temp' =>
array (
0 => 'doc3',
1 => 'doc4',
),
),
),
)
array (
2009 =>
array (
'08' =>
array (
0 => 'doc5',
1 => 'doc6',
2 => 'doc7',
),
),
2010 =>
array (
'01' =>
array (
0 => 'doc8',
1 => 'doc9',
),
),
)
这是预期的合并:
array (
2009 =>
array (
'08' =>
array (
0 => 'doc1',
1 => 'doc2',
2 => 'doc5',
3 => 'doc6',
4 => 'doc7',
'temp' =>
array (
0 => 'doc3',
1 => 'doc4',
),
),
),
2010 =>
array (
'01' =>
array (
0 => 'doc8',
1 => 'doc9',
),
),
)
对于您提供的数组结构,下面的代码适用于我。我们检查每个阵列并检查:
- 如果未设置键,请在
中设置它(注意用于编辑$result相同副本的$result
)&
- 如果设置了键,并且值不是数组,则将其添加到
$result
- 如果value是数组,则使用
和$result[$key]
作为参数,再次递归调用$value
函数mergeRecursive()
<?php
$arr1 = array (
2009 =>
array (
'08' =>
array (
0 => 'doc1',
1 => 'doc2',
),
),
);
$arr2 = array (
2009 =>
array (
'08' =>
array (
'temp' =>
array (
'doc3',
'doc4',
),
),
),
);
$arr3 = array (
2009 =>
array (
'08' =>
array (
'doc5',
'doc6',
'doc7',
),
),
2010 =>
array (
'01' =>
array (
'doc8',
'doc9',
),
),
);
$merge_arrays = [$arr2,$arr3];
$result = $arr1;
foreach($merge_arrays as $array){
mergeRecursive($result,$array);
}
function mergeRecursive(&$result,$arr){
foreach($arr as $key => $value){
if(!isset($result[$key])){
$result[$key] = $value;
}else if(is_array($value)){
mergeRecursive($result[$key],$value);
}else{
$result[] = $value;
}
}
}
print_r($result);
可以帮助您。@marv255这不是OP期望的结果。另外,请仅附上en
链接。谢谢您的回答。这在使用数组_merge时无法正常工作_recursive@egolive你能保证两个数组都有相同的键吗,即使是深键?“例如,第一个数组可以有4层深,第二个数组可以有7层深。”-那么,你能举一个这种情况的例子吗?不一定有那么多层次,但实际结果应该是什么样的。如果[2009][08][0]在第一个数组中是doc3
,但在第二个数组中[2009][08][0]本身又是一个数组,那么它的“合并”会是什么样子呢?这正是我想要的!非常感谢!:)@我很乐意帮忙:)