2015-07-02 53 views
7

我試圖將兩個不同的數組合併到一個數組中。任何人都可以幫助我嗎?PHP通過值爲兩個不同的數組值合併數組

我有這樣

[0] (Array)#2 
    [rank] "579" 
    [id] "1" 
[1] (Array)#4 
    [rank] "251" 
    [id] "2" 

[0] (Array)#2 
    [size] "S" 
    [rank] "251" 
[1] (Array)#15 
    [size] "L" 
    [rank] "579" 

我需要這樣的

[0] (Array)#2 
    [size] "S" 
    [rank] "251" 
    [id] "1" 
[1] (Array)#15 
    [size] "L" 
    [rank] "579" 
    [id] "1" 
+4

[array_merge](http://php.net/manual/en/function.array-merge.php)? – Andrew

+0

期望的輸出對我來說並沒有多大意義。 – treegarden

+0

你有試過什麼嗎?你如何獲得這些數組? –

回答

0

雖然我不明白你爲什麼要這樣合併陣列陣列,這是一個被合併的數組的方式他們的序列。所以陣列1的第一個孩子將與數組2等

<?php 

$array1 = [ 
    [ 
     'rank' => 579, 
     'id' => 1 
    ], 
    [ 
     'rank' => 251, 
     'id' => 2 
    ] 
]; 

$array2 = [ 
    [ 
     'size' => 'S', 
     'rank' => 251 
    ], 
    [ 
     'size' => 'L', 
     'rank' => 579 
    ] 
]; 


foreach ($array1 as $key => &$data) { 
    if (isset($array2[$key])) { 
     $data = array_merge($data, $array2[$key]);  
    } 
} 

var_dump($array1); 
+0

如果序列不一樣會怎麼樣? –

+0

如果大多數假設的答案是這種情況,並且@ user3686600想使用排名作爲加入點,則此解決方案將不正確 – Ali

4

未測試的第一個孩子被合併,但這應該工作,或至少讓你接近。

for ($array1 as $key1 => $value1) { 
    for ($array2 as $key2 => $value2) { 
     if ($value1['rank'] == $value2['rank']) { 
      $result[$key1] = [$value2['size'], $value1['rank'], $value1['id']]; 
     }; 
    }; 
}; 
+0

這將更改其中一個數組($ array1)。你必須根據你的標準確定接受。通常一個合併過程應該保持原來的根完好無損,並創建一個新的_(第三)_實體作爲結果 – Ali

+1

修復,我們可以弄清楚它需要複製的密鑰。沒有看到任何理由補充,迄今爲止。 – psycotik

1
foreach($arr1 as $key1 => $data1){ 
    foreach($arr2 as $key2 => $data2){ 
     if($data1['rank']==$data2['rank']){ 
      $result[] = array_merge($data1, $data2); 
     } 
    } 
} 
print_r($result); 
+0

一個適當的合併解決方案,但你假設**排名**鍵總是存在和唯一的兩個陣列(這是很好,儘可能多的情況下:)) – Ali

+1

如果你有任何獨特的關鍵男裝,否則你使用一個否則你不需要檢查condion和seconf for循環。 :) –

+0

同意,至今我們對**排名**的假設是有效的;) – Ali

0
//save keys of ranks in the 1st array 
$keys = array(); 
foreach($arr1 as $k => $v) 
    $keys[$v['rank']] = $k; 

$res = array(); 
// Walk through the 2nd array and make result 
foreach($arr2 as $k => $v) 
if (isset($keys[$v['rank']])) 
    $res[] = array_merge($arr1[$keys[$v['rank']]], $v); 

print_r($res); 
0

看你提供的陣列中,我假設你要使用的關鍵排名作爲連接點(這似乎並不這樣一個好主意,問題將是如果他們的唯一與否)如果它們是唯一的,然後一個小方法可以幫助基於他們的排名來獲取元素,剩下的只是組裝結果:

<?php 

$arr1 = [ 
    [ 
     'rank' => 579, 
     'id' => 1 
    ], 
    [ 
     'rank' => 251, 
     'id' => 2 
    ], 
]; 

$arr2 = [ 
    [ 
     'size' => 'S', 
     'rank' => 251 
    ], 
    [ 
     'size' => 'L', 
     'rank' => 579 
    ], 
]; 

function getItemByRank($array, $rank) 
{ 
    foreach ($array as $item){ 
     if ($item['rank'] === $rank) { 
      return $item; 
     } 
    } 
} 


$result = []; 
foreach ($arr1 as $k => $item) { 

    $match = getItemByRank($arr2, $item['rank']); 

    if (isset($match)) { 
     $result[$k] = $item; 
     $result[$k]['size'] = $match['size']; 
    } 
} 

print_r($result); 

輸出:

Array 
(
    [0] => Array 
     (
      [rank] => 579 
      [id] => 1 
      [size] => L 
     ) 

    [1] => Array 
     (
      [rank] => 251 
      [id] => 2 
      [size] => S 
     ) 

)