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']));//將鍵和值重新組合,形成新數組
}

有沒有更好的方法嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章