Рекурсивные функции

```

public static function sortCategories1($cat){

    // нужно посмотреть на эту функию и уловить повторяющиеся

    // действия а затем написать фукцию вызвающую саму себя

    $tree = [];

    foreach($cat as $item){

        $id = $item['id'];

        $parent_id = $item['parent_id'];

        if ($parent_id === null){

            $childs = [];

            foreach ($cat as $item1){

                $parent_id1 = $item1['parent_id'];

                $id1 = $item1['id'];

                if ($parent_id1 == $id){

                    $childs1 = [];

                    foreach ($cat as $item2){

                        $parent_id2 =  $item2['parent_id'];

                        $id2 = $item2['id'];

                        if ($parent_id2 == $id1){

                            $childs2 = [];

                            /**/

                        }

                    }

                    $el1 = [

                        'item' => $item1,

                        'childs' => $childs1

                    ];

                    $childs[] = $el1;

                }

            }

            $el = [

                'item' => $item,

                'childs' => $childs

            ];

            $tree[] = $el;

        }

    }

    //ShopAjaxAdmin::getChild($tree, $cat);

    major_dd($tree);

}

public static function getChilds11($cat, $id, $depth = 1){

    $childs = [];

    $depth = $depth + 1;// это уровень вложенности

    foreach ($cat as $item1){

        $parent_id1 = $item1['parent_id'];

        $id1 = $item1['id'];

        if ($parent_id1 == $id){

            $childs1 = [];

            ShopAjaxAdmin::$srt =

                ShopAjaxAdmin::$srt.

                str_repeat('  ', $depth).

                $item1['name']."\n";

            ShopAjaxAdmin::$category_sorted_tree[] = [// это одноуровневое деререво, для простого вывода в smarty

                'item' => $item1,

                'depth' => $depth,

                'name' => str_repeat('  ', $depth)."- ".$item1['name']

            ];

            $childs_el = ShopAjaxAdmin::getChilds11($cat, $id1, $depth);

            $el1 = [

                'item' => $item1,

                'childs' => $childs_el,

                'depth' => $depth

            ];

            $childs[] = $el1;

        }

    }

    return $childs;

}

public static $category_sorted_tree = [];

public static $srt = '';

public static function sortCategories($cat){// можно было начинать и с null но пофиг

    $tree = [];

    foreach($cat as $item){

        $id = $item['id'];

        $parent_id = $item['parent_id'];

        if ($parent_id === null){

            ShopAjaxAdmin::$srt = ShopAjaxAdmin::$srt . "▼".$item['name']."\n";

            ShopAjaxAdmin::$category_sorted_tree[] = [

                'item' => $item,

                'depth' => 1,

                'name' => "▼".$item['name']

            ];

            $el = [

                'item' => $item,

                'childs' => ShopAjaxAdmin::getChilds11($cat, $id, 1),

                'depth' => 1

            ];

            $tree[] = $el;

        }

    }

    //ShopAjaxAdmin::getChild($tree, $cat);

    major_dd($tree);

    major_dd(ShopAjaxAdmin::$category_sorted_tree);

    major_dd(ShopAjaxAdmin::$srt);

}

```