简体   繁体   English

类别的嵌套函数

[英]Nested function for categories

I'm trying to make a nested function for multiple subcategories and I have the following array with categories and subcategories. 我正在尝试为多个子类别创建一个嵌套函数,我有以下数组和类别和子类别。

Array
(
    [0] => Array
        (
            [id] => 1
            [parent_id] => 0
            [name] => Women
        )

    [1] => Array
        (
            [id] => 6
            [parent_id] => 0
            [name] => Men
        )

    [2] => Array
        (
            [id] => 4
            [parent_id] => 1
            [name] => Child of women 3
        )

    [3] => Array
        (
            [id] => 5
            [parent_id] => 4
            [name] => Child of "Child of women 3"
        )
)

and the following function 以及以下功能

private function categories($array, $parent_id = 0) {
    $return = array();
    foreach($array as $key => $val) {
        if($val['parent_id'] == $parent_id) {
            $return[$val['id']] = $val;
        } else {
            $return[$val['parent_id']]['children'][] = $val;
        }
    }
    return $return;
}

For now it works only with 1 subcategory but I want this output: 现在它只适用于1个子类别,但我想要这个输出:

Women
--Child of women 3
----Child of "Child of women 3
Men
private function categories($array, $parent_id = 0) {
    $textb = '';
    foreach($array as $key => $val) {
        if($val['parent_id'] == $parent_id) {
            $current_id = $val['id'];

            $textb .= '<li>' . $val['name'];

            $categories = self::categories($array, $current_id);
            if(isset($categories) && !empty($categories))
                $textb .= '<ul>' . $categories . '</ul>';

            $textb .= '</li>';
        }
    }
    return $textb;
}

I managed something but It looks weird and there is a duplicate. 我管理了一些东西,但它看起来很奇怪,并且有重复。

private function categories($array, $parent_id = 0) {
    $return = array();
    foreach($array as $key => $val) {
        if($val['parent_id'] == $parent_id) {
            $return[$val["id"]] = $val["name"];
            $return[$val["id"]] = array_merge($return, self::categories($array, $val["id"]));
        }
    }
    return $return;
}


Array
(
    [1] => Array
        (
            [0] => Women
            [1] => Array
                (
                    [0] => Child of women 3
                    [1] => Array
                        (
                            [0] => Child of "Child of women 3"
                        )

                )

        )

    [6] => Array
        (
            [0] => Array
                (
                    [0] => Women
                    [1] => Array
                        (
                            [0] => Child of women 3
                            [1] => Array
                                (
                                    [0] => Child of "Child of women 3"
                                )

                        )

                )

            [1] => Men
        )

)

Try this: [Please note, I tried on separate file without class.] 试试这个:[请注意,我尝试了没有上课的单独文件。]

function categories($array, $parent_id = 0) {
    $return = array();
    foreach($array as $key => $val) {       
        if($val['parent_id'] == $parent_id) {           
            $return[$val["id"]] = categories($array, $val["id"]);
            $return[$val["id"]]["name"] = $val["name"];
        }
    }
    return $return;
}

It will give you output as below: 它会给你输出如下:

Array
(
    [1] => Array
        (
            [4] => Array
                (
                    [5] => Array
                        (
                            [name] => Child of "Child of women 3"
                        )

                    [name] => Child of women 3
                )

            [name] => Women
        )

    [6] => Array
        (
            [name] => Men
        )

)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM