PHP中的循环和数组合并问题
我有两个二维数组。它们都包含PHP中的循环和数组合并问题,php,arrays,loops,merge,foreach,Php,Arrays,Loops,Merge,Foreach,我有两个二维数组。它们都包含id和其他不相关的东西。如果id匹配,我的工作就是将这两个数组合并在一起 这是他们的样子: array(3) { [0]=> array(3) { ["id"]=> string(3) "161" ["x"]=> string(1) "foo" ["y"]=> string(1) "bar" } } [1]=> array(3) { ["id"]=>
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
数组中,而不会得到重复项
谢谢你的建议 实现这一点的一种方法是,首先以如下方式重新索引数组:
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”值设置为每个数组的键。
然后可以毫无问题地对它们进行数组_merge()
我希望这对你有帮助。我不知道这是一个坏的语气,但我自己解决了我的问题。:) 编辑: 更好的方法
foreach ($posts as $key => $post) {
if (isset($rated_items[$key])) {
$posts[$key] += $rated_items[$key];
}
}
这应该起作用:
$newArray = array();
foreach($array as $key => $arr){
if(@$array2[$key]['id'] == $arr['id']){
$newArray[] = array_merge($arr, $array2[$key]);
} else {
$newArray[] = $arr;
}
}
或
您不需要使用$i,您可以改为使用:foreach($key=>&$post)。同样作为推荐使用参考(更有效),如:$posts[$i]=&$post;
$newArray = array();
foreach($array as $key => $arr){
if(@$array2[$key]['id'] == $arr['id']){
$newArray[] = array_merge($arr, $array2[$key]);
} else {
$newArray[] = $arr;
}
}
$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;
}
}