dsc862009 2016-09-24 05:47
浏览 30
已采纳

php嵌套数组爆炸

Hi one of my column in table has data like

category1_subcat_1
category1_subcat_2
category1_subcat_3
category2_subcat_1
category2_subcat_2
category3_subcat_1
category3_subcat_3

I want to convert it to nested array like

category1
 subcat1
 subcat2
 subcat3

category2
 subcat1
 subcat2

category3
 subcat1
 subcat3

i tried

foreach ($categories as $category){     

 $cat_array = explode("_",$category['cat_subcat']);
 $cat_subcat = array(
        'cat'=>$cat_array[0],
        'subcat'=>$cat_array[1]
        );
}

but how do i group this by category please help

  • 写回答

3条回答 默认 最新

  • dongsha2792 2016-09-24 05:53
    关注

    Try this..

    <?php
    
    $categories = [
        ['cat_subcat' => 'category1_subcat_1'],
        ['cat_subcat' => 'category1_subcat_2'],
        ['cat_subcat' => 'category1_subcat_3'],
        ['cat_subcat' => 'category2_subcat_1'],
        ['cat_subcat' => 'category2_subcat_2'],
        ['cat_subcat' => 'category3_subcat_1'],
        ['cat_subcat' => 'category3_subcat_3']
    ];
    
    $finalCategories = [];
    
    foreach ($categories as $category){
        $cat_array = explode("_",$category['cat_subcat']);
        $finalCategories[$cat_array[0]][] = $cat_array[1] . $cat_array[2];
    }
    
    echo "<pre>";
    print_r($finalCategories);
    

    The output will be..

    Array
    (
        [category1] => Array
            (
                [0] => subcat1
                [1] => subcat2
                [2] => subcat3
            )
    
        [category2] => Array
            (
                [0] => subcat1
                [1] => subcat2
            )
    
        [category3] => Array
            (
                [0] => subcat1
                [1] => subcat3
            )
    
    )
    

    Add the following lines of code..

    // Adding another loop
    $output = [];
    $i = 0;
    foreach ($finalCategories as $category => $subCategories) {
        $output[$i]['cat_name'] = $category;
        foreach ($subCategories as $subCategory) {
            $output[$i]['sub_cat'][] = $subCategory;
        }
        $i++;
    }
    
    echo "<pre>";
    print_r($output);
    

    New Ouptut..

    Array
    (
        [0] => Array
            (
                [cat_name] => category1
                [sub_cat] => Array
                    (
                        [0] => subcat1
                        [1] => subcat2
                        [2] => subcat3
                    )
    
            )
    
        [1] => Array
            (
                [cat_name] => category2
                [sub_cat] => Array
                    (
                        [0] => subcat1
                        [1] => subcat2
                    )
    
            )
    
        [2] => Array
            (
                [cat_name] => category3
                [sub_cat] => Array
                    (
                        [0] => subcat1
                        [1] => subcat3
                    )
    
            )
    
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥20 求用stm32f103c6t6在lcd1206上显示Door is open和password:
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法