在PHP中合并2个对象数组

rrr*_*sco 3 php arrays

你如何合并array1和2?

数组1

Array
(
    [0] => stdClass Object
    (
        [name] => bob
        [id] => 84569354306
        [contacts] => Array
        (
            [0] => none
        )
    )
    [1] => stdClass Object
    (
        [name] => jill
        [id] => 456745742
        [contacts] => Array
        (
            [0] => none
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

数组2

Array
(
    [0] => stdClass Object
    (
        [name] => bob
        [id] => 84569354306
        [pid] => 1
        [lang] => eng;
        [location] =>
    )
    [1] => stdClass Object
    (
        [name] => jill
        [id] => 456745742
        [pid] => 2
        [lang] => eng;
        [location] =>
    )
)
Run Code Online (Sandbox Code Playgroud)

结果数组:

Array
(
    [0] => stdClass Object
    (
        [name] => bob
        [id] => 84569354306
        [pid] => 1
        [lang] => eng;
        [location] =>
        [contacts] => Array
        (
            [0] => none
        )
    )
    [1] => stdClass Object
    (
        [name] => jill
        [id] => 456745742
        [pid] => 2
        [lang] => eng;
        [location] =>
        [contacts] => Array
        (
            [0] => none
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

我尝试了一个array_merge()似乎在数组中彼此相邻的对象,而不是合并对象.

我很确定这个问题与我需要的问题类似,但我对简单的foreach循环有困难.

dyn*_*mic 8

您可以将两个对象强制转换为数组,然后重新强制转换回对象.一般语法是:

$merged = (object)array_merge_recursive((array)$firstObj, (array)$secondObj);
                              ^
                              | note the recursive in your case
Run Code Online (Sandbox Code Playgroud)

此外,如果您使用这样的对象,也许您应该坚持使用数组.用物体做这样的事情几乎没有任何意义

有多个项目

如果你有多个项目,你只需要在循环中包装我的脚本:

function myCustomMerge($array1, $array2) {
   assert('count($array1) == count($array2)');
   $result = array();
   foreach($array1 as $k=>$v) {
    $item = array_merge_recursive((array)$array1[$k], (array)$array2[$k]);
    $result[]=$item; // use (object)$item if you need objects
   }
   return $result;
}
Run Code Online (Sandbox Code Playgroud)

解决方案无需铸造

如果您不想在数组和对象之间来回转换,可以使用get_object_vars():

$obj2props = get_object_vars($obj2);
foreach ($obj2props as $prop => $value) {
    $obj1->$prop = $value;
}
return $obj;
Run Code Online (Sandbox Code Playgroud)