我正在尝试合并两个CodeIgniter查询的结果。问题是这两个数组都包含对象行,而array_merge()
对对象不起作用。如何合并这两个对象数组呢?
输入:
$array1 = [
(object) [
'trainerid' => 1,
'firstname' => 'abc',
'location' => 'area',
'photo' => 'abc.jpg',
'role' => 'user',
'city' => 'bangalore',
],
(object) [
'trainerid' => 2,
'firstname' => 'abcd',
'location' => 'area',
'photo' => 'abcd.jpg',
'role' => 'user',
'city' => 'bangalore',
],
];
$array2 = [
(object) [
'rating' => 3.0000,
'users' => 0,
'review' => 0
],
(object) [
'rating' => 4.0000,
'users' => 4,
'review' => 5
]
];
所需输出:
array (
0 =>
(object) array(
'trainerid' => 1,
'firstname' => 'abc',
'location' => 'area',
'photo' => 'abc.jpg',
'role' => 'user',
'city' => 'bangalore',
'rating' => 3.0,
'users' => 0,
'review' => 0,
),
1 =>
(object) array(
'trainerid' => 2,
'firstname' => 'abcd',
'location' => 'area',
'photo' => 'abcd.jpg',
'role' => 'user',
'city' => 'bangalore',
'rating' => 4.0,
'users' => 4,
'review' => 5,
),
)
3条答案
按热度按时间c2e8gylq1#
通过使用CodeIgniter的
->result()
而不是->result_array()
,您已经使一个相对基本的任务变得更加困难。如果您有数组的数组,那么您可以只使用array_map('array_merge', $array1, $array2)
,但这不适用于您的对象数组。相反,您需要在每个对象上调用
get_object_vars()
(并且您将在外部array_map()
中迭代多个对象。从本质上讲,此任务是同时迭代两个数组,将每对对象转换为数组类型,然后合并数组,再将合并后的数组转换回对象类型。
下面的代码段设计为具有处理2个或更多对象数组的灵活性。
代码:(Demo)
当只有两个对象数组被合并时,上面的代码可以写得更简洁一些。(Demo)
可以使用经典的嵌套foreach方法来避免在合并时强制转换和重新强制转换数据类型。
array_merge()
和array_merge_recursive()
(当前)不能用于将对象合并在一起--它们的属性必须在接收对象中单独定义。(Demo)以上任何代码段的输出:
bvjveswy2#
您需要将
array_map
与array_merge
沿着使用,如下所示dnph8jn43#
您可以输入类似以下的内容:
让我们假设$a是第一个数组,$B是第二个数组,$c是您想要的输出。