我有两个2D数组。它们都包含id
和其他不相关的东西。我的工作是在id
匹配时将这两个数组合并在一起!
这就是他们的样子:
array(3) {
[0]=>
array(3) {
["id"]=>
string(3) "161"
["x"]=>
string(1) "foo"
["y"]=>
string(1) "bar"
}
}
[1]=>
array(3) {
["id"]=>
string(3) "164"
["x"]=>
string(1) "foo"
["y"]=>
string(1) "bar"
}
[2]=>
array(3) {
["id"]=>
string(3) "168"
["x"]=>
string(1) "foo"
["y"]=>
string(1) "bar"
}
}
array(2) {
[0]=>
array(3) {
["id"]=>
string(3) "161"
["z"]=>
string(1) "baz"
}
[1]=>
array(3) {
["id"]=>
string(3) "164"
["z"]=>
string(1) "baz"
}
这就是结果的样子:
array(3) {
[0]=>
array(3) {
["id"]=>
string(3) "161"
["x"]=>
string(1) "foo"
["y"]=>
string(1) "bar"
["z"]=>
string(1) "baz"
}
}
[1]=>
array(3) {
["id"]=>
string(3) "164"
["x"]=>
string(1) "foo"
["y"]=>
string(1) "bar"
["z"]=>
string(1) "baz"
}
[2]=>
array(3) {
["id"]=>
string(3) "168"
["x"]=>
string(1) "foo"
["y"]=>
string(1) "bar"
}
}
这就是我到目前为止所拥有的。当然,它不起作用。
foreach ($rated_items as $item) {
foreach ($posts as $post) {
if ($post['id'] == $item['id']) {
$posts = array_merge($posts, $item); // Doesn't work at all.
}
}
}
问题在于我不知道如何将当前 $post
合并到当前 $item
然后,两者都添加到$posts
数组而没有重复。
感谢您的建议!
答案 0 :(得分:2)
我不知道这是一个不好的语气,但我自己解决了我的问题。 :)
$i = 0;
foreach ($posts as $post) {
$posts[$i] = $post;
foreach ($rated_items as $item) {
if ($post['id'] == $item['id']) {
$posts[$i] += $item;
}
}
++$i;
}
修改强>
更好的方式......
foreach ($posts as $key => $post) {
if (isset($rated_items[$key])) {
$posts[$key] += $rated_items[$key];
}
}
答案 1 :(得分:1)
实现它的一种方法是首先重新索引数组,方式如下:
array(3) {
[161]=>
array(3) {
["id"]=>
string(3) "161"
["x"]=>
string(1) "foo"
["y"]=>
string(1) "bar"
}
}
[164]=>
array(3) {
["id"]=>
string(3) "164"
["x"]=>
string(1) "foo"
["y"]=>
string(1) "bar"
}
[168]=>
array(3) {
["id"]=>
string(3) "168"
["x"]=>
string(1) "foo"
["y"]=>
string(1) "bar"
}
}
基本上,您将设置为每个数组的键,即“id”值。 然后你可以没有问题地使用array_merge()它们。
我希望它可以帮到你。
答案 2 :(得分:0)
这应该有效:
$newArray = array();
foreach($array as $key => $arr){
if(@$array2[$key]['id'] == $arr['id']){
$newArray[] = array_merge($arr, $array2[$key]);
} else {
$newArray[] = $arr;
}
}
答案 3 :(得分:0)
$tmp = array_merge($posts , $rated_items);
$final = array();
foreach($tmp as $v){
foreach($v as $k => $va){
$final[$v['id']][$k] = $va;
}
}
或
$tmp = array_merge($posts , $rated_items);
$final = array();
foreach($tmp as $v){
if($final[$v['id']]){
$final[$v['id']] = array_merge($final[$v['id']], $v);
}else{
$final[$v['id']] = $v;
}
}