現在有兩個二維數組,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
4 回答

慕娘9325324
TA貢獻1783條經驗 獲得超4個贊
$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);

子衿沉夜
TA貢獻1828條經驗 獲得超3個贊
php內置函數好像沒有提供這中堅決方案的。自定義實現。
首先試一下獲取兩個數組的交集,array_intersect(),找出那些元素是相同的,然后在找出數組的差集,array_diff(),處理差集。形成一個新的數組

HUH函數
TA貢獻1836條經驗 獲得超4個贊
使用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;
}
}, []);
- 4 回答
- 0 關注
- 776 瀏覽
添加回答
舉報
0/150
提交
取消