亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

兩個二維數組怎么根據相同字段結合

兩個二維數組怎么根據相同字段結合

PHP
一只名叫tom的貓 2019-03-15 13:20:25
現在有兩個二維數組,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);
查看完整回答
反對 回復 2019-03-18
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

php沒有提供這樣的函數,而且php很少有能直接對二維數組進行操作的函數,這題只能自定義函數實現

查看完整回答
反對 回復 2019-03-18
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

php內置函數好像沒有提供這中堅決方案的。自定義實現。
首先試一下獲取兩個數組的交集,array_intersect(),找出那些元素是相同的,然后在找出數組的差集,array_diff(),處理差集。形成一個新的數組

查看完整回答
反對 回復 2019-03-18
?
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;
        }
}, []);
查看完整回答
反對 回復 2019-03-18
  • 4 回答
  • 0 關注
  • 776 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號