Php 如何使用唯一键和重复数据合并不同长度的数组

Php 如何使用唯一键和重复数据合并不同长度的数组,php,arrays,merge,array-push,Php,Arrays,Merge,Array Push,更新:一个数组是实际数组,另一个是对象数组 我想在键匹配的地方合并两个重复数据的数组 $arr1 = array( object(stdClass){"id" => 1, "key" => 1, "content" => "blah", "extra" => "extra data"}, object(stdClass){"id" => 2, "key" => 2, "content" => "bleep", "extra" => "ext

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

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

$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")
};
我已经尝试了嵌套的
foreach()
array\u merge()、array\u walk\u recursive()、array\u combine()、array\u push()
,并且仍在努力实现这两种方法的成功组合,但我得到的最接近的结果是将
$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\u search
array\u column
搜索
$arr2

$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>";

这是无效的PHP…您期望的结果是什么?@prasannaputtaswamy我想要$desiredar的结果(我正在编辑排版)这些数组无效format@prasannaputtaswamy问题已更新,以更正格式并使我正在使用的密钥更清晰我已更新问题,以更正数组并将id交换为密钥,使其更清晰。我不认为这会影响你的回答,但我尝试的时候会得到500分。现在正在处理它。@bardicwarrior更新后的数组仍然不是有效数组。@bardicwarrior但我想我知道你的意思。请检查我的最新答案。我很抱歉-我认为当所有阵列以这种最小格式排列时,更容易看到问题-我感谢您继续!这对我很有用,我以前从未使用过array_列,也没有使用过array_搜索-感谢您向我介绍这些工具@巴第克勇士很乐意帮忙:)
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
        )

)