gpt4 book ai didi

php - 在 PHP 中合并 2 个对象数组

转载 作者:可可西里 更新时间:2023-11-01 00:00:11 26 4
gpt4 key购买 nike

如何合并数组 1 和 2?

array1

Array
(
[0] => stdClass Object
(
[name] => bob
[id] => 84569354306
[contacts] => Array
(
[0] => none
)
)
[1] => stdClass Object
(
[name] => jill
[id] => 456745742
[contacts] => Array
(
[0] => none
)
)
)

array2

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] =>
)
)

结果数组:

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
)
)
)

我试过 array_merge(),它似乎在数组中将对象彼此相邻添加,而不是合并对象。

我很确定 this question 与我需要的类似,但我在使用简单的 foreach 循环时遇到困难。

最佳答案

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

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

此外,如果您正在使用类似的对象,也许您应该坚持使用数组。对对象做那样的事情几乎没有意义

有多个项目

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

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;
}

没有类型转换的解决方案

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

$obj2props = get_object_vars($obj2);
foreach ($obj2props as $prop => $value) {
$obj1->$prop = $value;
}
return $obj;

关于php - 在 PHP 中合并 2 个对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28226507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com