如何合并具有唯一键和重复数据的不同长度的数组
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_search
和array_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
)
)
更新:一个数组是实际数组,另一个是对象数组。
我想合并两个数组,在键匹配的地方重复数据。
$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_search
和array_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>";
这将导致:
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
)
)