猿问

php将两个数组相同的key合并到一个数组

$arr=array(
array(
'id'=>1,
'user_name'=>'test1'
),
array(
'id'=>2,
'user_name'=>'test2'
),
array(
'id'=>3,
'user_name'=>'test3'
)
);
$arr2=array(
array(
'id'=>1,
'shop_name'=>'shop1'
),
array(
'id'=>5,
'shop_name'=>'shop2'
),
array(
'id'=>3,
'shop_name'=>'shop3'
)
);
怎么根据2个数组id相同的一维数组,将$arr2的shop_name添加到$arr,如果没有相同的id,shop_name为空,形成如下数组:
$good_arr=array(
array(
'id'=>1,
'user_name'=>'test1',
'shop_name'=>'shop1'
),
array(
'id'=>2,
'user_name'=>'test2',
'shop_name'=>''
),
array(
'id'=>3,
'user_name'=>'test3',
'shop_name'=>'shop3'
)
);
我的方案:有更好的吗?O(∩_∩)O谢谢
/*foreach($arras$key=>&$value){
$value['shop_name']='';
}
unset($value);
*/
foreach($arras$k2=>&$v2){
$v2['shop_name']='';
foreach($arr2as$k=>$v){
if($v2['id']==$v['id']){
$v2['shop_name']=$v['shop_name'];
}
}
}
print_r($arr);
梵蒂冈之花
浏览 429回答 2
2回答

汪汪一只猫

functionfilter($item){returncount($item)==3?$item:false;}$newArr=array_filter(array_merge($arr,$arr2),'filter');题主实在不好意思,上面这个回答我弄错了array_merge的用法,现在重写一个,已本机测试:$tempArr=array();foreach($arr2as$item)$tempArr[$item['id']]=$item['shop_name'];foreach($arras$k=>$v){if(array_key_exists($v['id'],$tempArr)){$arr[$k]['shop_name']=$tempArr[$v['id']];}else{$arr[$k]['shop_name']='';}}$newArr=$arr;btw,我以前也喜欢写嵌套循环,因为逻辑比较简单,但是自从@公子指正后,我已经开始尽量避免这种效率极低的写法,希望答案能帮到题主!:)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答