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