2017-02-22 30 views
0

Iはに基づいて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 
    ], 

2つ目は、私はに基づいて第2のいずれかに最初のものをプッシュする必要が

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

である2つの異なる配列であるました同じキー

これはこのように見えます

(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

あなたはキャストしたいと言っています最初の配列をオブジェクトとして使用し、オブジェクトを同じキーでマージしますか?または、2番目の配列を配列としてキャストし、マージした後にオブジェクト全体としてキャストしますか? – mickmackusa

+0

私は最初の配列を2番目の配列にマージする必要があります(まだ存在していない場合)2番目の配列のデータが必要です...配列へのプッシュのように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); 
関連する問題