2011-12-22 109 views
2

我試圖讓兩個數組數組(我認爲這意味着他們是多維的)通過共享值組合/合併在一起。換句話說,類似於SQL中的JOIN語句。有沒有一種特定的,有效的方法來解決這個問題?在PHP中組合這個數組數組的最有效方法是什麼?

試圖合併這兩個:

Array 
(
    [0] => Array 
     (
      [0] => 5 
      [1] => alice 
      [2] => car 
     ) 

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

    [2] => Array 
     (
      [0] => 5 
      [1] => charlie 
      [2] => bike 
     ) 

) 
Array 
(
    [0] => Array 
     (
      [0] => 5 
      [1] => alice 
      [2] => Vancouver 
     ) 

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

    [2] => Array 
     (
      [0] => 5 
      [1] => charlie 
      [2] => Portland 
     ) 

) 

生產出:

Array 
(
    [0] => Array 
     (
      [0] => 5 
      [1] => alice 
      [2] => car 
      [3] => Vancouver 
     ) 

    [1] => Array 
     (
      [0] => 3 
      [1] => bob 
      [2] => truck 
      [3] => Toronto 
     ) 

    [2] => Array 
     (
      [0] => 5 
      [1] => charlie 
      [2] => bike 
      [3] => Portland 
     ) 

) 
+0

你想「加入ID」?可能最好將該id設爲數組索引。 – 2012-08-04 21:20:43

+0

另外,我更喜歡第二級的arrray被關聯,不會混合 – 2012-08-04 21:21:50

+0

與@eicto一致 - 如果你有一個帶有命名鍵的數組而不是[ 1],[2],[3]。事實上,我甚至可以說這是必需的,以使您的系統更加健壯。因爲誰說不可能有一個叫做'Bike'的城市,或者一個叫'Truck'的人?如果你有任何數據模糊的可能性,那麼你不能使用任何包含'array_unique'或'array_merge'等的答案。 – Spudley 2012-08-04 21:37:17

回答

2
foreach ($a as $key => $val) { 
    $result[$key] = array_unique(array_merge($a[$key], $b[$key])); 
} 

我會像這樣的東西去了。首先合併兩個數組,然後整理出重複的項目。這當然要求兩個數組具有相同的長度和數字指示。

0

「最佳」你首先不會有兩個數組。

針對此具體情況下的解決方案:

$a1 = [ 
    [5, 'alice', 'car'], 
    [3, 'bob', 'truck'], 
    [5, 'charlie', 'bike'], 
]; 

$a2 = [ 
    [5, 'alice', 'Vancouver'], 
    [3, 'bob', 'Toronto'], 
    [5, 'charlie', 'Portland'] 
]; 

$a3 = array_map(function($a, $b) { $a[] = $b[2]; return $a; }, $a1, $a2); 

結果(部分):

array(3) { 
    [0] => 
    array(4) { 
    [0] => 
    int(5) 
    [1] => 
    string(5) "alice" 
    [2] => 
    string(3) "car" 
    [3] => 
    string(9) "Vancouver" 
    } 
... 

如果您不需要保留$a1身邊,你真的不打算以獲得比以下更好的解決方案:

foreach ($a1 as $key => $val) 
    $a1[$key][] = $a2[$key][2]; 
相關問題