2017-02-22 124 views
0

我已2個不同陣列合併兩個不同的陣列基於相同的密鑰

首先是

(int) 0 => [ 
     'id' => (int) 1, 
     'file_name' => 'test', 
     'imported_by' => 'John', 
     'valid_to' => (float) 1767225600000 
    ], 
    (int) 1 => [ 
     'id' => (int) 2, 
     'file_name' => null, 
     'imported_by' => 'John', 
     'valid_to' => (float) 1767225600000 
    ], 

第二個是

(int) 0 => object(App\Model\Entity\Product) { 
     'id' => (int) 1, 
     'product_cat' => (int) 10, 
     'product_type' => (int) 1, 
     'average.... 

我必須第一個推入基於第二個相同的鑰匙

它看起來像這個一樣

(int) 0 => object(App\Model\Entity\Product) { 
     'id' => (int) 1, 
     'product_category_id' => (int) 10, 
     'product_vessel_id' => (int) 1, 
     'average' => test; 
     //content from first array 
     'file_name' => 'test', 
     'imported_by' => 'John', 
     'valid_to' => (float) 1767225600000 

我試過 array_merge_recursive($ firstArray,$ secondArray);但平均增加對firstArray

+0

你可能需要一個定製的合併功能 –

+1

你是說你想投的第一個數組作爲一個對象,並使用相同的鍵合併對象?或者,將第二個數組轉換爲數組,合併後將整個事物作爲對象進行投射? – mickmackusa

+0

我必須合併第一個數組到第二個(如果存在),如果不是我仍然需要第二個數組的數據...所以像推到數組的地方id(first_array)== id(second_array) – JohnWayne

回答

1
$array1 = array(...); 
$array2 = array(...); 

foreach ($array1 as $element) { 
    foreach ($array2 as $object) { 
    if ($object->id == $element['id']) { 
     $object->filename = $element['filename']; 
     $object->imported_by = $element['imported_by']; 
     $object->valid_to = $element['valid_to']; 
     break; 
    } 
    } 
} 
+0

這就是我想要的,我有一點點改變代碼,但它的作品... @RST thx – JohnWayne

0
<?php 
$result = array(); 
$array_one=array(0 => array('id' => 1, 
     'file_name' => 'test', 
     'imported_by' => 'John', 
     'valid_to' => 1767225600000), 

    1 => array(
     'id' => 2, 
     'file_name' => "", 
     'imported_by' => 'John', 
     'valid_to' => 1767225600000) 



     ); 


$array_seond= array(
        0 => array(
           'id' => 1, 
         'product_cat' => 10, 
         'product_type' => 1, 
         'average' => 'test' 
        ) 
       ); 


    echo "<pre>"; 




//print_r($result); 

    foreach($array_seond as $key => $value){ 
       foreach($array_one as $value_second){ 

        if($value['id']==$value_second['id']){ 
         $result[$key] =array_merge($array_seond[$key],$value_second); 

        } 

       } 

    } 


    print_r($result); 
?> 
0

末元素您可以使用此功能:

function merge_two_arrays($array1,$array2) { 
     $data = array(); 
     $arrayAB = array_merge($array1,$array2); 
     foreach ($arrayAB as $value) { 
      $id = $value['id']; 
      if (!isset($data[$id])) { 
      $data[$id] = array(); 
      } 
      $data[$id] = array_merge($data[$id],$value); 
     } 
     return $data; 
     } 

    $master_array = merge_two_arrays($array1,$array2);