如何将产品类别数组嵌套到基于父id的多维数组中


PHP : How can i nest a product category array into multi dimensional array based on the parrent id?

我想创建一个函数,它可以返回一个多维数组,比如类别及其子类别嵌套在里面通过一个数组包含id,类别名称和父类别id

这是我的数组
<?php
          $category = array(  
                             [
                               'id'            => 1 ,
                               'name'          => "Main Category 1",
                               'parent_id'     => 0 ,
                               'subcategories' => array()
                             ],
                             [
                               'id'             => 2 ,
                               'name'           => "Sub Category of id 1",
                               'parent_id'      => 1,
                                'subcategories' => array()
                             ],
                              [
                               'id'            => 3 ,
                               'name'          => "Sub Category of id 2",
                               'parent_id'     => 2,
                               'subcategories' => array()
                             ],
                             [
                               'id'            => 4 ,
                               'name'          => "Another sub Category of id 2",
                               'parent_id'     => 2,
                               'subcategories' => array()
                             ],
                             [
                               'id'            => 5 ,
                               'name'          => "Another sub Category of id 1",
                               'parent_id'     => 1,
                               'subcategories' => array()
                             ],
                           ); ?>

我想把它变成这样

<?php 
        $category = array(
       [
        'id'            => 1 ,
        'name'          => "Main Category 1" ,
        'parent_id'     => 0 ,
        'subcategories' => array(
            [
                'id'            => 2 ,
                'name'          => "Sub Category of id 1" ,
                'parent_id'     => 1 ,
                'subcategories' => array(
                    [
                        'id'        => 3 ,
                        'name'      => "Sub Category of id 2" ,
                        'parent_id' => 2
                    ] ,
                    [
                        'id'        => 4 ,
                        'name'      => "Another sub Category of id 2" ,
                        'parent_id' => 2
                    ]
                )
            ] ,
            [
                'id'        => 5 ,
                'name'      => "Another sub Category of id 1" ,
                'parent_id' => 1
            ]
         )
      ]
); ?>

parent_id引用数组中的类别id

必须正确使用'&'运算符,

$categories = array();
//make associative array of $category with respective id as key
foreach($category as $val){
   $categories[$val['id']]= $val;
}
// fill in 'subcategories' while maintaining the references using '&' operator
foreach($categories as $key => &$val){
   if($val['parent_id']==0)
        continue;
   $categories[$val['parent_id']]['subcategories'][] = &$val;
}
var_dump($categories[1]);