两个二维数组怎么根据相同字段结合

现在有两个二维数组,
array1(

array(pid=>1,pname=>名字1),
array(pid=>2,pname=>名字2),

);
array2(

array(pid=>1,name=>子名01),
array(pid=>1,name=>子名02),
array(pid=>1,name=>子名03),
array(pid=>2,name=>子名04),
array(pid=>2,name=>子名05)

);
除了两次foreach循环外,怎么用php方法,将两个数组结合,得出
array(

array(pid=>1,pname=>名字1,name=>'子名01,子名02,子名03'),
array(pid=>2,pname=>名字2,name=>'子名04,子名05)

);
这种格式的数组。
简单的问法就是怎么不在两次foreach循环的情况下,根据两个数组中的相同字段的交集。php上得leftjoin

一只名叫tom的猫
浏览 754回答 4
4回答

慕娘9325324

$arr1 = array( array('pid'=>1,'pname'=>'名字1'), array('pid'=>2,'pname'=>'名字2') ); $arr2 = array( array('pid'=>1,'name'=>'子名01'), array('pid'=>1,'name'=>'子名02'), array('pid'=>1,'name'=>'子名03'), array('pid'=>2,'name'=>'子名04'), array('pid'=>2,'name'=>'子名05') ); $temp = []; foreach($arr2 as &$v){ $temp[$v['pid']]['name'] .= $v['name'].','; $temp[$v['pid']]['pid'] = $v['pid']; } foreach($arr1 as &$item){ if($temp[$item['pid']]) { $item = array_merge($item, $temp[$item['pid']]); $item['name'] = trim($item['name'],','); }else{ $item['name'] = ''; } } var_dump($arr1);

慕田峪4524236

php没有提供这样的函数,而且php很少有能直接对二维数组进行操作的函数,这题只能自定义函数实现

子衿沉夜

php内置函数好像没有提供这中坚决方案的。自定义实现。首先试一下获取两个数组的交集,array_intersect(),找出那些元素是相同的,然后在找出数组的差集,array_diff(),处理差集。形成一个新的数组

HUH函数

使用array_reduce函数可以实现你的需求,具体代码如下: $pidMap = array_combine(array_column($array1, 'pid'), $array1); array_reduce($array2, function($carray, $item) use (&$pidMap) { if (isset($pidMap[$item['pid']])) { if (isset($pidMap[$item['pid']]['name'])) { $pidMap[$item['pid']]['name'] .= ',' . $item['name']; } else { $pidMap[$item['pid']]['name'] = $item['name']; } } else { $pidMap[] = $item; } }, []);
打开App,查看更多内容
随时随地看视频慕课网APP