2013-05-14 55 views
1

我有兩個陣列,如下所示。我需要合併數組的內容,以便我可以最終獲得第三個數組中顯示的結構。我檢查了array_merge,但無法弄清楚這是可能的。任何幫助讚賞。謝謝。陣列在二級合併

array(
    (int) 0 => array(
     'gross_value' => '100', 
     'quantity' => '1' 
    ), 
    (int) 1 => array(
     'gross_value' => '200', 
     'quantity' => '1' 
    ) 
) 

array(
(int) 0 => array(
    'item_title_id' => '1', 
    'order_id' => '4' 
), 
(int) 1 => array(
    'item_title_id' => '2', 
    'order_id' => '4' 
) 
) 

我應該得到這樣

array(
(int) 0 => array(
    'gross_value' => '100', 
    'quantity' => '1', 
    'item_title_id' => '1', 
    'order_id' => 4 
), 
(int) 1 => array(
    'gross_value' => '200', 
    'quantity' => '1', 
    'item_title_id' => '2', 
    'order_id' => 4 
) 

合併陣列)

回答

2

使用array_merge_recursive

轉換所有的數字鍵爲字符串,(使被關聯數組)

$result = array_merge_recursive($ar1, $ar2); 
print_r($result); 

live demo here

+0

謝謝,這是一個完美的解決方案,儘管每個人的解決方案都是這樣或者那樣。 – aeonsleo 2013-05-14 11:29:25

+0

@ Abhishek:你的歡迎:)。 Think Hatke .. – Roopendra 2013-05-14 11:37:10

0

我可能會遍歷數組了,然後手動將它們合併。

$result = array(); 
foreach ($array1 as $key => $item) 
{ 
    $result[$key] = array_merge($array1[$key], $array2[$key]); 
} 

如果頂級數組沒有嚴格匹配的鍵,那麼您將遇到問題。

0

如果你有$陣列1和$數組2,試試這個:

foreach($array1 as $key1=>$innerArray){ 
    $array1[$key1]['item_title_id'] = $array2[$key1]['item_title_id']; 
    $array1[$key1]['order_id'] = $array2[$key1]['order_id']; 
} 
1

怎麼樣:

$arr1 = array(
    0 => array(
     'gross_value' => '100', 
     'quantity' => '1' 
    ), 
    1 => array(
     'gross_value' => '200', 
     'quantity' => '1' 
    ) 
); 
$arr2 = array(
    0 => array(
     'item_title_id' => '1', 
     'order_id' => '4' 
    ), 
    1 => array(
     'item_title_id' => '2', 
     'order_id' => '4' 
    ) 
); 
$arr = array(); 
foreach($arr1 as $k => $v) { 
    array_push($arr, array_merge($v, $arr2[$k])); 
} 
print_r($arr); 

輸出:

Array 
(
    [0] => Array 
     (
      [gross_value] => 100 
      [quantity] => 1 
      [item_title_id] => 1 
      [order_id] => 4 
     ) 

    [1] => Array 
     (
      [gross_value] => 200 
      [quantity] => 1 
      [item_title_id] => 2 
      [order_id] => 4 
     ) 

) 

看一看array_merge

0

的東西像合併遞歸的問題是,他們不知道什麼時候停止。

在某些情況下,您希望停止遍歷數組,並且只要存在給定值即可。

例如,如果您必須重寫嵌套的配置數組,您可能不希望默認鍵在特定的級別上停留。

這裏是我的解決方案:

public static function merge_lvl2(){ 
    $args = func_get_args(); 
    return static::merge($args, 2); 
} 

public static function merge($args, $maxDepth = null, $depth = 1) 
{ 
    $merge = []; 
    foreach($args as $arg) { 
     if (is_array($arg)) { 
      if (is_array($merge)) { 
       if ($maxDepth == $depth) { 
        $arg += $merge; 
        $merge = $arg; 
       } else { 
        $merge = array_merge($merge, $arg); 
       } 
      } else { 
       $merge = $arg; 
      } 
     } 
    } 
    if ($maxDepth !== $depth) { 
     foreach($args as $a) { 
      if (is_array($a)) { 
       foreach($a as $k => $v) { 
        if (isset($merge[$k]) && is_array($merge[$k])) { 
         $merge[$k] = static::merge([$merge[$k], $v], $maxDepth, $depth + 1); 
        } 
       } 
      } 
     } 
    } 
    return $merge; 
} 

您可以通過儘可能多的陣列合併,只要你想。

$merged = ClassName::merge_lvl2([..array1..], [..array2..], [..array3..], etc...); 

它將在級別2停止合併並接受鍵的最後一個實例作爲覆蓋而不是合併。

您也可以直接調用args數組並設置最大深度。

如果沒有設置最大深度,它將遍歷整個數組。