2017-07-28 113 views
0

阵列我有含有2个阵列数据。我想能够将它们添加在一起,以便第二个数组中的信息连接到第一个数组中。目前我正在做的array_merge将第二个数组添加到第一个数组的末尾。合并与现有的阵列的PHP

阵列1

[1] => Array 
     (
      [0] => 2017-07-13 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 16.11 
      [4] => 80.56 
      [5] => 96.67 
     ) 
[2] => Array 
     (
      [0] => 2017-07-13 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 1.23 
      [4] => 50.69 
      [5] => 14.24 
     ) 

阵列2

[1] => Array 
     (
      [0] => TIME 
      [1] => Lorem 
      [2] => Ipsum 
     ) 

[2] => Array 
     (
      [0] => TIME 
      [1] => Some 
      [2] => Text 

     ) 

如何可以合并两个阵列,以便输出变成如下面?

阵列3

[1] => Array 
     (
      [0] => 2017-07-13 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 16.11 
      [4] => 80.56 
      [5] => 96.67 
      [6] => TIME 
      [7] => Lorem 
      [8] => Ipsum 
     ) 
[2] => Array 
     (
      [0] => 2017-07-13 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 1.23 
      [4] => 50.69 
      [5] => 14.24 
      [6] => TIME 
      [7] => Some 
      [8] => Text 
     ) 

什么正在发生

[1] => Array 
     (
      [0] => 2017-07-14 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 16.11 
      [4] => 80.56 
      [5] => 96.67 
     ) 

    [2] => Array 
     (
      [0] => 2017-07-14 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 1.23 
      [4] => 50.69 
      [5] => 14.24 
     ) 

    [3] => Array 
     (
      [0] => TIME 
      [1] => Lorem 
      [2] => Ipsum 
     ) 

    [4] => Array 
     (
      [0] => TIME 
      [1] => Some 
      [2] => Text 
     ) 

我试图array_merge($array1 , $array2);但其将所述第二数组的第一个的端部。

任何想法?

+0

每个阵列中有2个阵列,因此与对口,而不是主阵列合并的每个那些阵列。 – WheatBeak

+0

你试过['array_merge_recursive()'](http://php.net/manual/en/function.array-merge-recursive.php)吗? – axiac

回答

1

这看起来很期待我的,你只需array_merge()这两个数组的元素:

<?php 
$A = [ 
    1 => [ 
     '2017-07-13 00:00:00', 
     'Foo', 
     'Bar', 
     16.11, 
     80.56, 
     96.67 
    ], 
    2 => [ 
     '2017-07-13 00:00:00', 
     'Foo', 
     'Bar', 
     1.23, 
     50.69, 
     14.24 
    ] 
]; 
$B = [ 
    1 => [ 
     'TIME', 
     'Lorem', 
     'Ipsum' 
    ], 
    2 => [ 
     'TIME', 
     'Some', 
     'Text' 
    ] 
]; 

array_walk($B, function($values, $key) use (&$A) { 
    $A[$key] = array_merge($A[$key], $values); 
}); 
print_r($A); 

该obviou的输出狡猾的是:

Array 
(
    [1] => Array 
     (
      [0] => 2017-07-13 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 16.11 
      [4] => 80.56 
      [5] => 96.67 
      [6] => TIME 
      [7] => Lorem 
      [8] => Ipsum 
     ) 

    [2] => Array 
     (
      [0] => 2017-07-13 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 1.23 
      [4] => 50.69 
      [5] => 14.24 
      [6] => TIME 
      [7] => Some 
      [8] => Text 
     ) 
) 

UPDATE:

在下面你问,如果这种方法可以推广到合并数组任意数量的注释。当然这是可能的,你只需要添加一次迭代层:

<?php 
$target = [ 
    1 => ['2017-07-13 00:00:00', 'Foo', 'Bar', 16.11, 80.56, 96.67], 
    2 => ['2017-07-13 00:00:00', 'Foo', 'Bar', 1.23, 50.69, 14.24] 
]; 
$sources = [ 
    'B' => [ 
     1 => ['TIME', 'Lorem', 'Ipsum'], 
     2 => ['TIME', 'Some', 'Text'] 
    ], 
    'C' => [ 
     1 => ['C1a', 'C1b'], 
     2 => ['C2a', 'C2b', 'C2b'] 
    ] 
]; 

array_walk($sources, function($source) use (&$target) { 
    array_walk($source, function($values, $key) use (&$target) { 
     $target[$key] = array_merge($target[$key], $values); 
    }); 
}); 
print_r($target); 

这种变异产生的输出:

Array 
(
    [1] => Array 
     (
      [0] => 2017-07-13 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 16.11 
      [4] => 80.56 
      [5] => 96.67 
      [6] => TIME 
      [7] => Lorem 
      [8] => Ipsum 
      [9] => C1a 
      [10] => C1b 
     ) 

    [2] => Array 
     (
      [0] => 2017-07-13 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 1.23 
      [4] => 50.69 
      [5] => 14.24 
      [6] => TIME 
      [7] => Some 
      [8] => Text 
      [9] => C2a 
      [10] => C2b 
      [11] => C2b 
     ) 

) 
+0

天才。如果我有两个以上的数组,这是否适用?如果我想将3个数组合并成一个? –

+0

当然,我为这个答案增加了一个变体作为UPDATE。 – arkascha

0

那这与array_merge_recursive

array_merge_recursive()合并一个或多个阵列 在一起的元件,使得一个值被附加到 前一个的端部。它返回结果数组。

$result = array_merge_recursive($first_array, $second_array); 

编辑:如果array_merge_recursive不为你工作,那就试试这个https://eval.in/838950

<?php 
$first_array = [ 
    1 => [ 
     '2017-07-13 00:00:00', 
     'Foo', 
     'Bar', 
     16.11, 
     80.56, 
     96.67 
    ], 
    2 => [ 
     '2017-07-13 00:00:00', 
     'Foo', 
     'Bar', 
     1.23, 
     50.69, 
     14.24 
    ] 
]; 
$second_array = [ 
    1 => [ 
     'TIME', 
     'Lorem', 
     'Ipsum' 
    ], 
    2 => [ 
     'TIME', 
     'Some', 
     'Text' 
    ] 
]; 

foreach($second_array as $k=>$v){ 
$first_array[$k] = array_merge($frist_array[$k],$v); 
} 


print '<pre>'; 
/*print_r(array_merge_recursive($first_array,$second_array));*/  
print_r($frist_array); 
+0

我试过这个,但它没有工作,请参阅编辑的问题我得到的输出与array_merge()和array_merge_recursive() –

+0

@IbrahimHafiji请参阅我的编辑 –

0

你想创建一个多维数组?

这是相当容易的。

$new_array[] = $array_1; 
$new_array[] = $array_2; 
+0

试试你自己的代码。你会发现它不会像问题中所描述的那样产生输出。 – arkascha

+1

你是对的,我领先于自己,并没有完成这个问题。 –

0

你可以试试这个方法:

$array1 = [ 
     [1,2,3,4], 
     [6,7,8,9] 
    ]; 
    $array2 = [ 
     ['a','b'], 
     ['c', 'd'] 
    ]; 
    $array3 = []; 
    foreach (range(0, max(count($array1), count($array2))-1) as $i) { 
     $part1 = isset($array1[$i]) ? $array1[$i] : []; 
     $part2 = isset($array2[$i]) ? $array2[$i] : []; 
     $array3[] = array_merge($part1, $part2); 
    }