2017-02-22 156 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); 
相关问题