使用PHP合并另一个数组中的对象数组

时间:2015-08-24 15:02:36

标签: php arrays associative-array array-merge

我有一个数组数组,每个数组都是"内部"包含任意数量对象的数组。虽然其父数组中的任何对象都不能复制,但在"外部"包含所有数组的数组,可能会发生重复。我的目标是合并所有内部数组,以便只有一个数组没有重复。

到目前为止,我已经尝试在循环外部数组时使用array_merge和array_merge_recursive,但这并没有成功。我不确定我是否会非常清楚地解释这一点,但这是可以做到的吗?

这里有一个var_dump作为初始数组的一个例子:

array (size=4)
    27 => 
        array (size=4)
            0 => 
                 object(stdClass)[75]
                 public 'subTestId' => string '1' (length=1)
                 public 'testMakerTestId' => null
            1 => 
                 object(stdClass)[76]
                 public 'testMakerTestId' => string '5844' (length=4) 
            2 => 
                 object(stdClass)[77]
                 public 'subTestId' => string '23' (length=2)
            3 => 
                 object(stdClass)[78]
                 public 'subTestId' => string '12' (length=2)
    24 => 
        array (size=3)
            0 => 
                object(stdClass)[79]
                public 'subTestId' => null
            1 => 
                object(stdClass)[80]
                public 'subTestId' => null
            2 => 
                object(stdClass)[81]
                public 'subTestId' => string '12' (length=2)
    1 => 
        array (size=1)
            0 => 
                object(stdClass)[82]
                public 'subTestId' => string '23' (length=2)
    25 => 
         array (size=1)
             0 => 
                 object(stdClass)[83]
                 public 'subTestId' => string '23' (length=2)

我想将它们全部合并,并且没有任何重复的" subTestId"领域。最好的方法是什么?任何帮助是极大的赞赏。

谢谢!

1 个答案:

答案 0 :(得分:1)

我还没有对此进行测试,但我认为它应该可行:

OutputStream

它将使用其subTestID作为键存储来自$merged = []; foreach ($outer as $inner) { foreach ($inner as $obj) { $id = $obj->subTestId; if(!array_key_exists($id, $merged)) { $merged[$id] = $obj; } } } 中每个内部数组的每个对象,但前提是该密钥不在$merged中。