簡體   English   中英

遞歸函數以獲取php中類別的編號樹

[英]Recursive function to get numbered tree of categories in php

我對包含類別樹的嵌套數組有一個大問題:

Array(
[1] => Array
    (
        [parent_id] => 0
        [category_id] => 1
        [name] => Auto-moto
        [path] => Auto-moto
        [children] => Array
            (


                [4] => Array
                    (
                        [parent_id] => 1
                        [category_id] => 4
                        [name] => Autodiely
                        [path] => Auto-moto/Autodiely
                        [children] => Array
                            (
                                [5] => Array
                                    (
                                        [parent_id] => 4
                                        [category_id] => 5
                                        [name] => Kabínové filtre pre automobily
                                        [path] => Auto-moto/Autodiely/Kabínové filtre pre automobily
                                        [children] => 
                                    )

我有一個遞歸函數在html ul> li list中顯示它,但我想使列表看起來像這樣:

1.Auto-moto
1.1.Autodiely
1.1.1.Kabínové filtre pre automobily
1.1.2. xxxx
1.2.YYY
1.3.AAA
2.New
2.1.Sub....

那可能嗎? 非常感謝您的幫助。

使用遞歸。 我的方法是遞歸遍歷所有級別的所有數組,並為每個級別將相應的代碼添加到“級別”鍵中。 這是您的一個示例:

$arr = array(
    'a' => array(

        'name' => 'a',
        'children' => array(

            'aa' => array(
                'name' => 'aa',
                'children' => array(

                    'aaa' => array(
                        'name' => 'aaa',
                    ),
                ),
            ),

            'ab' => array(
                'name' => 'ab',
                'children' => array(

                    'aba' => array(
                        'name' => 'aba',
                        'children' => array(

                            'abaa' => array(
                                'name' => 'abaa',
                            ),

                        ),
                    ),
                    'abb' => array(
                        'name' => 'abb',
                    ),
                ),
            ),
        )
     ),
    'b' => array(
        'name' => 'b',
        'children' => array(
            'ba' => array(
                'name' => 'ba',
            ),
            'bb' => array(
                'name' => 'bb',
            ),
        )
    ),
);

/**
 * To target array, for each level adds new field named 'level', with level deep number 
 * @param type $array target array
 * @param type $level nested level number
 */
function add_levels( &$array, $level ){
    $i = 0;
    foreach ( $array as $key => &$value ) {
        $level_name = $level.++$i;
        $value[ 'level' ] = $level_name;

        if( array_key_exists( 'children', $value ) and is_array( $value[ 'children' ] )){
            add_levels( $value[ 'children' ], $level_name.'.' );
        }

    }
}

/**
 * Prints out array in required form
 * @param type $array
 */
function draw_ordered( $array ){
    foreach ( $array as $key => &$value ) {
        echo( $value[ 'level' ].'.'. $value[ 'name' ].'<br />' );
        if( array_key_exists( 'children', $value ) and is_array( $value[ 'children' ] )){
            draw_ordered( $value[ 'children' ] );
        }
    }
}

add_levels( $arr );
//print_r($arr);

draw_ordered( $arr );
die();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM