2017-02-17 12 views
-1

最初のアレイの2つのプロパティがあります2つの配列を同じIDでマージするにはどうすればよいですか?

IDを、テキスト

二番目の配列は新しい配列には3つのプロパティを持つことになりますどこidで1つの配列にこれらを結合する方法

を数え、二つの特性 IDを持っています:

ID テキスト 数

最初の配列:

array(2) { 
    [0]=> 
    object(stdClass)#351 (2) { 
    ["id"]=> 
    string(1) "1" 
    ["text"]=> 
    string(5) "tree" 
    } 
    [1]=> 
    object(stdClass)#348 (2) { 
    ["id"]=> 
    string(1) "2" 
    ["text"]=> 
    string(8) "house" 
    } 

二番目の配列:

array(2) { 
    [0]=> 
    object(stdClass)#351 (2) { 
    ["id"]=> 
    string(1) "1" 
    ["count"]=> 
    string(5) "3" 
    } 
    [1]=> 
    object(stdClass)#348 (2) { 
    ["id"]=> 
    string(1) "2" 
    ["count"]=> 
    string(8) "4" 
    } 

私が試み:

array_merge_recursive、これらは一つだけ長い配列に2つの配列をマージarray_merge。

上記アレイと

期待出力:それは最初の配列内のオブジェクトのIDに一致する場合

array(2) { 
    [0]=> 
    object(stdClass)#351 (2) { 
    ["id"]=> 
    string(1) "1" 
    ["count"]=> 
    string(5) "3" 
    string(1) "1" 
    ["text"]=> 
    string(5) "tree" 
    } 
    [1]=> 
    object(stdClass)#348 (2) { 
    ["id"]=> 
    string(1) "2" 
    ["count"]=> 
    string(8) "4" 
    string(1) "2" 
    ["text"]=> 
    string(8) "house" 
    } 
+0

あなたの質問の言語(PHP?)を指定するには、タグを追加してください。 –

+0

PHPについて話していますか? –

+1

はいPHP配列..タグを追加しました – 112233

答えて

0

あなたは二番目の配列内のオブジェクトのプロパティをマージすることになる単純な関数を書くことができる:

function obj_array_merge($a1, $a2) { 
    $newAry = []; 
    foreach($a1 as $idx => $obj1) { 
     // Clone object to prevent alterations to object in $a1 
     $newAry[$idx] = clone $obj1; 
     foreach($a2 as $obj2) { 
      /** 
      ** If id property of both objects match, 
      ** copy properties from second array object 
      ** to new object (clone of first array object). 
      */ 
      if($newAry[$idx]->id === $obj2->id) { 
       foreach($obj2 as $prop => $val) { 
        $newAry[$idx]->$prop = $val; 
       } 
      } 
     } 
    } 
    return $newAry; 
} 

// To run: 
$mergedArray = obj_array_merge($array1, $array2); 

ただし、これは高速になるわけではありません。多数のオブジェクトでは、両方の配列を反復して一致するかどうかをチェックする必要があるため、かなり遅くなる可能性があります。また、新しい配列オブジェクトに存在するプロパティは、2番目の配列オブジェクトのプロパティで上書きされます(問題であるかどうかは指定していません)。

関連する問題