我有以下两个对象数组:
First Array: $array1
Array
(
[0] => stdClass Object
(
[id] => 100
[name] => John Doe
)
[1] => stdClass Object
(
[id] => 101
[name] => Jane Smith
)
[2] => stdClass Object
(
[id] => 102
[name] => Richard Tea
)
)
第二阵列: $array2
Array
(
[0] => stdClass Object
(
[id] => 100
[age] => 30
[other] => [other]
)
[1] => stdClass Object
(
[id] => 102
[age] => 26
)
)
我想合并这两个对象数组并根据id
进行排序。
期望的输出:
Array
(
[0] => stdClass Object
(
[id] => 100
[name] => John Doe
[age] => 30
[other] => [other]
)
[1] => stdClass Object
(
[id] => 101
[name] => Jane Smith
)
[2] => stdClass Object
(
[id] => 102
[name] => Richard Tea
[age] => 26
)
)
答案 0 :(得分:1)
此问题被标记为重复,但我不相信它是适用的,因为此问题中的数据是两个stdClass()
对象数组。
修改强>
我的第一个答案是非常头脑发热,显然我还没有足够强大地测试它。感谢@ splash58指出我实际上是通过数组索引合并/替换,而不是对象id。我的例子只有用,因为在提供的示例数据中,顺序恰好匹配。傻瓜......:)
相反,再次假设我们的数据数组$first
和$second
我们可以将$second
的值合并到$first
中,并嵌套循环和一些数组/对象转换。最后,我们应用用户定义的排序来按id排序结果;即:
foreach ($first as &$o1) {
foreach ($second as $o2) {
if ($o1->id === $o2->id) {
$o1 = (object) array_merge((array) $o1, (array) $o2);
}
}
}
usort($first, function($a, $b) {
return $a->id >= $b->id;
});
print_r($second);
这会产生:
Array
(
[0] => stdClass Object
(
[id] => 100
[name] => John Doe
[age] => 30
[other] => other
)
[1] => stdClass Object
(
[id] => 101
[name] => Jane Smith
)
[2] => stdClass Object
(
[id] => 102
[name] => Richard Tea
[age] => 26
)
)
希望这会有所帮助:)
答案 1 :(得分:0)
您可以使用array_merge:
以这种方式进行尝试由于您的数组内容是对象,因此在使用string
时需要将它们转换为数组。
array_merge
[概念证明]
<?php
$arrayTemp = array();
foreach ($array1 as $key => $value){
$arrayTemp[] = (object)array_merge((array)$array2[$key], (array)$value);
}
var_dump($arrayTemp);
?>