2017-02-22 28 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.... 

я должен толкать первый во второй основе тот же ключ

это shoud выглядит следующим образом

(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);