2017-02-22 3 views
0

Ich habe 2 verschiedene ArraysZusammenführen von zwei verschiedenen Arrays basierend auf demselben Schlüssel

Zuerst ist

(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 
    ], 

Zweite eines

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

ist I ersten in zweite schieben haben basierend auf gleiche Taste

sollte es so aussehen

(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 

Ich habe tryied mit array_merge_recursive ($ firstArray, $ secondArray); aber das mittlere Elemente am Ende des first

+0

Sie wahrscheinlich eine benutzerdefinierte Fusion Funktion –

+1

Sie müssen sagen, Sie werfen wollen, dass die erstes Array als Objekt und Objekte mit demselben Schlüssel zusammenführen? Alternativ können Sie das zweite Array als Array darstellen und nach dem Zusammenführen das gesamte Objekt als Objekt darstellen? – mickmackusa

+0

Ich muss das erste Array mit dem zweiten zusammenführen (falls vorhanden), wenn nicht, brauche ich noch Daten vom zweiten Array ... so wie Push zu Array wo id (first_array) == id (second_array) – JohnWayne

Antwort

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

Das ist was ich will, ich habe ein bisschen Änderungscode, aber es funktioniert ... @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

hinzufügen, können Sie diese Funktion verwenden:

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); 
Verwandte Themen