循环内的多维数组合并操作

时间:2012-02-17 20:13:45

标签: php arrays multidimensional-array

假设我有两个这样的数组:

$array1 = array('A' => array(
        'B' => array(
            'C' => array(
                'D' => array(
                    'data' => array(
                        0 => array(
                            'id' => 1,
                            'name' => 'name 1'),
                        1 => array(
                            'id' => 2,
                            'name' => 'name 2')))))));

$array2 = array('A' => array(
        'B' => array(
            'C' => array(
                'E' => array(
                    'data' => array(
                        0 => array(
                            'id' => 3,
                            'name' => 'name 3'),
                        1 => array(
                            'id' => 4,
                            'name' => 'name 4')))))));

如您所见,这两个数组具有相同的密钥A,B和C,但之后密钥不同。如何将这两个数组合并为:

$final_array = array('A' => array(
                'B' => array(
                    'C' => array(
                        'D' => array(
                            'data' => array(
                                0 => array(
                                    'id' => 1,
                                    'name' => 'name 1'),
                                1 => array(
                                    'id' => 2,
                                    'name' => 'name 2'))), 
                        'E' => array(
                            'data' => array(
                                0 => array(
                                    'id' => 3,
                                    'name' => 'name 3'),
                                1 => array(
                                    'id' => 4,
                                    'name' => 'name 4')))))));

正如您所看到的,在这种情况下,我将数组合并到同一个包含两个不同键的数组中。顺便说一句,这里我将数组从第二个数组的键E开始放入索引为C的数组中。

任何帮助将不胜感激,谢谢

编辑:现在,如果我的数组($ array1,$ array2,$ array3,$ array4等)在foreach循环中生成怎么样,我如何合并所有那些数组在一起(注意我事先不知道数组的数量)

2 个答案:

答案 0 :(得分:6)

http://php.net/manual/en/function.array-merge-recursive.php

print_r(array_merge_recursive($array1, $array2));

这应该可以解决问题。

添加了:

$collection=array();
foreach() {
     $collection[]=$myArray; //here you add your array to collection
} 
print_r(call_user_func_array('array_merge_recursive', $collection));

答案 1 :(得分:-1)

我没有对此进行测试,但请尝试以下代码:

foreach( $array1 as $key => $val )
{
 if( !in_array( $key, $array2 ) )
 {
  $array2[$key] = $val;
 }
}

修改

使用Rok Kralj的答案,使用本机函数可能是最好的方法,因为它们更快。