2011-12-19 195 views
9

我有两个数组,我想将这两个数组合并成单个数组。请查看下面的细节:php合并两个数组

第一个数组:

Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 2 
      [c] => 3 
     ) 

    [1] => Array 
     (
      [a] => 3 
      [b] => 2 
      [c] => 1 
     ) 
) 

第二个数组:

Array 
(
    [0] => Array 
     (
      [d] => 4 
      [e] => 5 
      [f] => 6 
     ) 

    [1] => Array 
     (
      [d] => 6 
      [e] => 5 
      [f] => 4 
     ) 
) 

我想这个结果。有人知道如何做到这一点?

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
     ) 

    [1] => Array 
     (
      [0] => 3 
      [1] => 2 
      [2] => 1 
     ) 
    [2] => Array 
     (
      [0] => 4 
      [1] => 5 
      [2] => 6 
     ) 

    [3] => Array 
     (
      [0] => 6 
      [1] => 5 
      [2] => 4 
     ) 
) 

希望你明白了这个问题。 预先感谢您。

+4

有什么错误使用[array_merge(http://php.net/array_merge)? – 2011-12-19 13:26:19

+0

@JonStirling是的,如果你想要OP指定的结果,那将会保留原始数组的键。注意他的答案有他的子阵列的基于0的索引。不管这是他需要还是不需要的结果,他只能回答! – liquorvicar 2011-12-19 13:48:30

+0

我没有看到array_merge的问题。看起来像OP:http://codepad.org/Bf5VpZOr – PiTheNumber 2011-12-19 14:13:44

回答

3

FIXED(再次)

function array_merge_to_indexed() { 
    $result = array(); 

    foreach (func_get_args() as $arg) { 
     foreach ($arg as $innerArr) { 
      $result[] = array_values($innerArr); 
     } 
    } 

    return $result; 
} 

接受输入阵列的数量不受限制,合并所有子阵列到一个容器中作为索引的数组,并返回结果。

编辑03/2014:提高可读性和效率

+1

这保留了阵列中的原始键,这不是他正在寻找的结果(至少不是来自问题中的数据)。 – liquorvicar 2011-12-19 13:49:14

+1

@liquorvicar不,它不是,这是该功能的重点,否则我只会说“使用array_merge()”。我使用'[]'转换为索引,尽管没有最后一个循环方法的'array_values()'可以说更好。 – DaveRandom 2011-12-19 13:55:21

+1

好吧,我确实运行了你的代码,但它不适用于我,但看着你编辑过的帖子,它肯定是我跑过的旧版本。 – liquorvicar 2011-12-19 15:32:30

1

如果你想回到你在你的问题中指定的确切结果,那么这样的事情会工作

function array_merge_no_keys() { 
    $result = array(); 
    $arrays = func_get_args(); 
    foreach($arrays as $array) { 
     if(is_array($array)) { 
      foreach($array as $subArray) { 
       $result[] = array_values($subArray); 
      } 
     } 
    } 
    return $result; 
} 
0

array_merge做的绝招:

$a = array(array(1,2,3), array(3,2,1)); 
$b = array(array(4,5,6), array(6,5,4)); 
var_dump(array_merge($a, $b)); 

试试看:http://codepad.org/Bf5VpZOr

正是想要的结果。

+0

但这不是OP正在使用的数据。在输入子数组中,键是关联的(单个字母),结果数组使用基于0的索引。 – liquorvicar 2011-12-19 15:33:34

+0

是的,我知道array_merge在 '$ a = array(array(1,2,3),array(3,2,1)); $ b = array(array(4,5,6),array(6,5,4)); var_dump(array_merge($ a,$ b));' 但不在我的代码中。 – 2011-12-20 01:13:08

+0

啊,知道我明白了!有人总是说结果是错误的,但它是输入。对于那个很抱歉。 – PiTheNumber 2012-10-19 05:53:00

0

您也可以使用:array_merge_recursive;对于多维数组。

<?php 
    $ar1 = array("color" => array("favorite" => "red"), 5); 
    $ar2 = array(10, "color" => array("favorite" => "green", "blue")); 
    $result = array_merge_recursive($ar1, $ar2); 
    print_r($result); 
?> 

结果:

Array(
    [color] => Array 
     (
      [favorite] => Array 
       (
        [0] => red 
        [1] => green 
       ) 

      [0] => blue 
     ) 

    [0] => 5 
    [1] => 10 
) 

来源:PHP Manual

3

更加简单和现代的方式是:

$merged = $array1 + ['apple' => 10, 'orange' => 20] + ['cherry' => 12, 'grape' => 32]; 

新数组语法从PHP 5.4