Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php合并两个动态递归数组_Php_Arrays - Fatal编程技术网

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]本身又是一个数组,那么它的“合并”会是什么样子呢?这正是我想要的!非常感谢!:)@我很乐意帮忙:)