2017-08-14 45 views
0

我有兩個數組,如:PHP數組合並在內部密鑰

$a = [ 
    0 => [ 
     'price' => 5.5 
    ], 
    1 => [ 
     'price' => 6.0 
    ], 
    2 => [ 
     'price' => 6.2 
    ], 
    3 => [ 
     'price' => 6.5 
    ], 
]; 

$b = [ 
    0 => [ 
     'color' => 'RED' 
    ], 
    1 => [ 
     'color' => 'WHITE' 
    ], 
    2 => [ 
     'color' => 'BLUE' 
    ], 
    3 => [ 
     'color' => 'RED' 
    ], 
]; 

我應該有這樣的迴應:

Array 
(
    [0] => Array 
     (
      [price] => 5.5 
      [color] => RED 
     ) 
    [1] => Array 
     (
      [price] => 6 
      [color] => WHITE 
     ) 
    [2] => Array 
     (
      [price] => 6.2 
      [color] => BLUE 
     ) 
    [3] => Array 
     (
      [price] => 6.5 
      [color] => RED 
     ) 
) 

我聽說功能:array_merge_recursive但反應不是該電源線:

Array 
(
    [0] => Array 
     (
      [price] => 5.5 
     ) 
    [1] => Array 
     (
      [price] => 6 
     ) 
    [2] => Array 
     (
      [price] => 6.2 
     ) 
    [3] => Array 
     (
      [price] => 6.5 
     ) 
    [4] => Array 
     (
      [color] => RED 
     ) 
    [5] => Array 
     (
      [color] => WHITE 
     ) 

    [6] => Array 
     (
      [color] => BLUE 
     ) 
    [7] => Array 
     (
      [color] => RED 
     ) 
    ) 

,所以我決定寫我自己的函數:

function merge ($a, $b) { 
    $keys = array_keys($a); 
    foreach ($keys as $value) { 
     if (isset($b[$value])) { 
      $tmp = array_keys($b[$value]); 
      foreach ($tmp as $val){ 
       $a[$value][$val] = $b[$value][$val]; 
      } 
     } 
    } 
    return $a; 
} 
print_r(merge($a, $b)); 

,我得到了適當的迴應:

Array 
(
    [0] => Array 
     (
      [price] => 5.5 
      [color] => RED 
     ) 
    [1] => Array 
     (
      [price] => 6 
      [color] => WHITE 
     ) 
    [2] => Array 
     (
      [price] => 6.2 
      [color] => BLUE 
     ) 
    [3] => Array 
     (
      [price] => 6.5 
      [color] => RED 
     ) 
) 

的問題是,它工作正常,小數組但不工作好大陣,所以我的問題是:我怎麼能優化功能?因爲複雜性會隨着合併的密鑰而增長。

使用PHP 7.0

回答

4

您需要檢查它們是相同的長度,然後一個簡單foreach是所有需要:

foreach($a as $k => $v) { 
    $result[$k] = array_merge($v, $b[$k]); 
} 
+0

可以有幾個鍵合併,並且陣列的長度可以不相同。 – perodriguezl

+1

馬格努斯擁有最好的一個。 – AbraCadaver

0

簡單的解決方案可能是,

$c = []; 

for($i=0; $i<count(array_keys($a)); $i++) { 
    $c[$i] =array_merge($a[$i], $b[$i]); 
} 

print_r($c); 

https://repl.it/KJNL