2011-12-19 133 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