2017-08-17 50 views
0

我有四個陣列像下面合併四個陣列具有共同的價值

$array1 = json_decode('[{"month":"January","url":1},{"month":"February","url":102},{"month":"March","url":192}]', true); 
$array2 = json_decode('[{"month":"January","ip":12},{"month":"June","ip":10}]', true); 
$array3 = json_decode('[{"month":"January","domain":120},{"month":"February","domain":200},{"month":"June","domain":100}]', true); 
$array4 = json_decode('[{"month":"January","file":80},{"month":"June","file":10}]') 

我的預計產量將

$result=[{"month":"January","url":1,"ip":12,"domain":120,"file":80},{"month":"February","url":102,"domain":120},{"month":"March","url":192,"domain":120},{"month":"June","ip":10,"domain":100,"file":10}] 

我已經試過這樣的,我能夠得到兩個數組。但我無法獲得四個陣列。

$result = []; 
foreach ($array1 as &$item) { 
if (empty($array2)) 
    break; 

foreach ($array2 as $key => $item2) { 
    if ($item['month'] === $item2['month']) { 
     $item = array_merge($item, $item2); 
     unset($array2[$key]); 
     continue; 
    } 
} 
} 
if (!empty($array2)) 
$array1 = array_merge($array1, $array2); 

echo json_encode($array1); 

回答

1

您可以使用next功能,從您的關聯數組獲得的第二個元素,並使用key功能獲取鍵:

$array1 = json_decode('[{"month":"January","url":1},{"month":"February","url":102},{"month":"March","url":192}]', true); 
$array2 = json_decode('[{"month":"January","ip":12},{"month":"June","ip":10}]', true); 
$array3 = json_decode('[{"month":"January","domain":120},{"month":"February","domain":200},{"month":"June","domain":100}]', true); 
$array4 = json_decode('[{"month":"January","file":80},{"month":"June","file":10}]', true); 

$array5 = array_merge($array1, $array2, $array3, $array4); 

$finalArr = []; 
foreach ($array5 as $value) { 
    $finalArr[$value['month']]['month'] = $value['month']; 
    next($value); 
    $finalArr[$value['month']][key($value)] = $value[key($value)]; 
} 

echo json_encode(array_values($finalArr), true); 

給出:

[{"month":"January","url":1,"ip":12,"domain":120,"file":80},{"month":"February","url":102,"domain":200},{"month":"March","url":192},{"month":"June","ip":10,"domain":100,"file":10}] 
-1

試試這個

$array1 = json_decode('[{"month":"January","url":1},{"month":"February","url":102},{"month":"March","url":192}]', true); 
$array2 = json_decode('[{"month":"January","ip":12},{"month":"June","ip":10}]', true); 
$array3 = json_decode('[{"month":"January","domain":120},{"month":"February","domain":200},{"month":"June","domain":100}]', true); 
$array4 = json_decode('[{"month":"January","file":80},{"month":"June","file":10}]', true); 

$result = []; 

foreach ([$array1, $array2, $array3, $array4] as $row) 
{ 
    foreach ($row as $item) 
    { 
     $month = $item['month']; 
     if (isset($result[$month])) 
     { 
      $item = array_merge($result[$month], $item); 
     } 

     $result[$month] = $item; 
    } 
} 

var_dump(array_values($result)); 
+1

感謝您的迴應。無論如何,我用array_replace_recursive來實現這一點。 – Raj

相關問題