如何合并具有唯一键和重复数据的不同长度的数组

How to merge arrays of different lengths with unique keys and duplicate data

更新:一个数组是实际数组,另一个是对象数组。

我想合并两个数组,在键匹配的地方重复数据。

$arr1 = array(
  object(stdClass){"id" => 1, "key" => 1, "content" => "blah", "extra" => "extra data"},
  object(stdClass){"id" => 2, "key" => 2, "content" => "bleep", "extra" => "extra data"},
  object(stdClass){"id" => 3, "key" => 3, "content" => "bloop", "extra" => "extra data"},
  object(stdClass){"id" => 4, "key" => 2, "content" => "zip", "extra" => "extra data"},
  object(stdClass){"id" => 5, "key" => 1, "content" => "zorp", "extra" => "extra data"}
);

$arr2 = array(
  array("id" => 1, "otherkey" => 1, "title" => "foo"),
  array("id" => 2, "otherkey" => 2, "title" => "bar"),
  array("id" => 3, "otherkey" => 3, "title" => "baz")
);

$desiredArr = {
  array("id" => 1, "key" => 1, "content" => "blah", "extra" => "extra data", "title" => "foo"),
  array("id" => 2, "key" => 2, "content" => "bleep", "extra" => "extra data", "title" => "bar"),
  array("id" => 3, "key" => 3, "content" => "bloop", "extra" => "extra data", "title" => "baz"),
  array("id" => 4, "key" => 2, "content" => "zip", "extra" => "extra data", "title" => "bar"),
  array("id" => 5, "key" => 1, "content" => "zorp", "extra" => "extra data", "title" => "foo")
};

我已经尝试 array_merge(), array_walk_recursive(), array_combine(), array_push() 与嵌套 foreach() 并且我仍在研究这样的成功组合,但我得到的最接近的是将 $arr2 附加到 $arr1 结果是:

$newArr = {
  array("id" => 1, "key" => 1, "content" => "blah", "extra" => "extra data"),
  array("id" => 2, "key" => 2, "content" => "bleep", "extra" => "extra data"),
  array("id" => 3, "key" => 3, "content" => "bloop", "extra" => "extra data"),
  array("id" => 4, "key" => 2, "content" => "zip", "extra" => "extra data"),
  array("id" => 5, "key" => 1, "content" => "zorp", "extra" => "extra data"),
  array("id" => 6, "otherkey" => 1, "title" => "foo"),
  array("id" => 7, "otherkey" => 2, "title" => "bar"),
  array("id" => 8, "otherkey" => 3, "title" => "baz")
};

如果有人 运行 在此之前非常感谢您的指导!

你可以用map来重申$arr1

使用array_searcharray_column搜索$arr2

的key
$arr1 = array(
  (object)array("id" => 1, "key" => 1, "content" => "blah", "extra" => "extra data"),
  (object)array("id" => 2, "key" => 2, "content" => "bleep", "extra" => "extra data"),
  (object)array("id" => 3, "key" => 3, "content" => "bloop", "extra" => "extra data"),
  (object)array("id" => 4, "key" => 2, "content" => "zip", "extra" => "extra data"),
  (object)array("id" => 5, "key" => 1, "content" => "zorp", "extra" => "extra data")
);

$arr2 = array(
  array("id" => 1, "otherkey" => 1, "title" => "foo"),
  array("id" => 2, "otherkey" => 2, "title" => "bar"),
  array("id" => 3, "otherkey" => 3, "title" => "baz")
);

$desiredArr = array_map(function($v) use($arr2) {
    $v = (array)$v;
    $key = array_search($v["id"], array_column($arr2, 'id'));
    $v["title"] = $arr2[$key]["title"];
    return $v;
}, $arr1);

echo "<pre>";
print_r( $desiredArr );
echo "</pre>";

这将导致:

Array
(
    [0] => Array
        (
            [id] => 1
            [key] => 1
            [content] => blah
            [extra] => extra data
            [title] => foo
        )

    [1] => Array
        (
            [id] => 2
            [key] => 2
            [content] => bleep
            [extra] => extra data
            [title] => bar
        )

    [2] => Array
        (
            [id] => 3
            [key] => 3
            [content] => bloop
            [extra] => extra data
            [title] => baz
        )

    [3] => Array
        (
            [id] => 4
            [key] => 2
            [content] => zip
            [extra] => extra data
            [title] => foo
        )

    [4] => Array
        (
            [id] => 5
            [key] => 1
            [content] => zorp
            [extra] => extra data
            [title] => foo
        )

)