PHP二维数组将重复键值合并重组成三维数组

把aa1数组转换成aa2数组
$aa1 = [
    '0'=>[
        'aa'=>'1',
        'bb'=>'2',
    ],
    '1'=>[
        'aa'=>'1',
        'bb'=>'3',
    ],
];

$aa2 = [
   '0'=>[
       'aa'=>'1',
       'cc'=>[
             "0"=>[
                'bb'=>'2',
             ],
             "1"=>[
                 "bb"=>"3",
              ]
        ],
    ]
 ];

操作如下:

$new_arr = array();
$img_arr = array();
foreach($list as $v) {

    if(!isset($new_arr[$v['id']]) && !isset($new_arr[$v['id']]['shop'])
        && !isset($new_arr[$v['id']]['sort']) && !isset($new_arr[$v['id']]['name'])
        && !isset($new_arr[$v['id']]['new_price']) && !isset($new_arr[$v['id']]['old_price'])
        && !isset($new_arr[$v['id']]['specs']) && !isset($new_arr[$v['id']]['number'])
        && !isset($new_arr[$v['id']]['details']) && !isset($new_arr[$v['id']]['label'])){
        $new_arr[$v['id']]['id']=$v['id']; //商品id
        $new_arr[$v['id']]['shop']=$v['shop'];//所属商店
        $new_arr[$v['id']]['sort']=$v['sort'];//所属分类
        $new_arr[$v['id']]['name']=$v['name'];//商品名称
        $new_arr[$v['id']]['new_price']=$v['new_price'];//最新价格
        $new_arr[$v['id']]['old_price']=$v['old_price'];//原价格
        $new_arr[$v['id']]['specs']=$v['specs'];//商品规格
        $new_arr[$v['id']]['number']=$v['number'];//商品库存
        $new_arr[$v['id']]['details']=$v['details'];//商品详情
        $new_arr[$v['id']]['label']=$v['label'];//商品标签
    }

    if(!isset($img_arr[$v['img_id']]) && !isset($img_arr[$v['img_id']]['goods_id'])
        && !isset($img_arr[$v['img_id']]['url']) && !isset($img_arr[$v['img_id']]['is_main'])){
        $img_arr[$v['img_id']-1]['img_id'] = $v['img_id']; //图片id
        $img_arr[$v['img_id']-1]['goods_id']=$v['goods_id'];//商品id
        $img_arr[$v['img_id']-1]['url']=$v['url'];//图片路径
        $img_arr[$v['img_id']-1]['is_main']=$v['is_main'];//是否为主图
    }
    foreach ($img_arr as $kk=>$vv){
        if($new_arr[$v['id']]['id'] == $vv['goods_id']){
            $new_arr[$v['id']]['images'][$kk] = $img_arr[$kk];
        }
    }
}

$new_arr = array_values($new_arr);

foreach ($new_arr as $k=>$v){
    $keys = range(0, count($new_arr[$k]['images'])-1);//重新生成指定范围的数组
    $new_arr[$k]['images'] = array_combine($keys, array_values($new_arr[$k]['images']));//将键和值重新组合,形成新数组
}

有没有更好的方法吗?

猜你喜欢

转载自blog.csdn.net/zyj_15067066062/article/details/105699123