2017-02-17 2 views
-1

первых массивов имеют два свойства:Как объединить два массива с одинаковым идентификатором?

идентификатор, текст

второго массив имеет два свойства идентификатора, граф

Как объединить их в один массив по идентификатору, где новый массив будет иметь три свойства:

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, array_merge, где они только объединить два массива вместе в один длинный массив.

Ожидаемые результаты с выше массивов:

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

yes php arrays..I добавил теги – 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); 

Однако обратите внимание, что это не будет быстро. С большим количеством объектов он может стать довольно медленным, так как он должен перебирать оба массива для проверки совпадений. Он также перезапишет свойства, существующие в новом объекте массива, с объектом второго объекта массива (вы не указали, была ли эта проблема).

Смежные вопросы