如何合并在PHP中保存数据的对象数组

时间:2015-12-16 12:51:20

标签: php arrays

我有以下两个对象数组:

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

2 个答案:

答案 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);
?>