[ create a new paste ] login | about

Link: http://codepad.org/8p9DyHUZ    [ raw code | output | fork | 3 comments ]

PHP, pasted on Jan 30:
<?php

$categories = array(
    array('id' => 1,  'parent' => 0, 'name' => 'Category A'),
    array('id' => 2,  'parent' => 0, 'name' => 'Category B'),
    array('id' => 3,  'parent' => 0, 'name' => 'Category C'),
    array('id' => 4,  'parent' => 0, 'name' => 'Category D'),
    array('id' => 5,  'parent' => 0, 'name' => 'Category E'),
    array('id' => 6,  'parent' => 2, 'name' => 'Subcategory F'),
    array('id' => 7,  'parent' => 2, 'name' => 'Subcategory G'),
    array('id' => 8,  'parent' => 3, 'name' => 'Subcategory H'),
    array('id' => 9,  'parent' => 4, 'name' => 'Subcategory I'),
    array('id' => 10, 'parent' => 9, 'name' => 'Subcategory J'),
);

function categoriesToTree(&$categories) {

    $map = array(
        0 => array('subcategories' => array())
    );

    foreach ($categories as &$category) {
        $category['subcategories'] = array();
        $map[$category['id']] = &$category;
    }

    foreach ($categories as &$category) {
        $map[$category['parent']]['subcategories'][] = &$category;
    }

    return $map[0]['subcategories'];

}

echo "=== BEFORE ===\n";
print_r ($categories);

$tree = categoriesToTree($categories);

echo "=== AFTER ===\n";
print_r ($categories);

echo "=== TREE ===\n";
print_r ($tree);


Output:
=== BEFORE ===
Array
(
    [0] => Array
        (
            [id] => 1
            [parent] => 0
            [name] => Category A
        )

    [1] => Array
        (
            [id] => 2
            [parent] => 0
            [name] => Category B
        )

    [2] => Array
        (
            [id] => 3
            [parent] => 0
            [name] => Category C
        )

    [3] => Array
        (
            [id] => 4
            [parent] => 0
            [name] => Category D
        )

    [4] => Array
        (
            [id] => 5
            [parent] => 0
            [name] => Category E
        )

    [5] => Array
        (
            [id] => 6
            [parent] => 2
            [name] => Subcategory F
        )

    [6] => Array
        (
            [id] => 7
            [parent] => 2
            [name] => Subcategory G
        )

    [7] => Array
        (
            [id] => 8
            [parent] => 3
            [name] => Subcategory H
        )

    [8] => Array
        (
            [id] => 9
            [parent] => 4
            [name] => Subcategory I
        )

    [9] => Array
        (
            [id] => 10
            [parent] => 9
            [name] => Subcategory J
        )

)
=== AFTER ===
Array
(
    [0] => Array
        (
            [id] => 1
            [parent] => 0
            [name] => Category A
            [subcategories] => Array
                (
                )

        )

    [1] => Array
        (
            [id] => 2
            [parent] => 0
            [name] => Category B
            [subcategories] => Array
                (
                    [0] => Array
                        (
                            [id] => 6
                            [parent] => 2
                            [name] => Subcategory F
                            [subcategories] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [id] => 7
                            [parent] => 2
                            [name] => Subcategory G
                            [subcategories] => Array
                                (
                                )

                        )

                )

        )

    [2] => Array
        (
            [id] => 3
            [parent] => 0
            [name] => Category C
            [subcategories] => Array
                (
                    [0] => Array
                        (
                            [id] => 8
                            [parent] => 3
                            [name] => Subcategory H
                            [subcategories] => Array
                                (
                                )

                        )

                )

        )

    [3] => Array
        (
            [id] => 4
            [parent] => 0
            [name] => Category D
            [subcategories] => Array
                (
                    [0] => Array
                        (
                            [id] => 9
                            [parent] => 4
                            [name] => Subcategory I
                            [subcategories] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 10
                                            [parent] => 9
                                            [name] => Subcategory J
                                            [subcategories] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

    [4] => Array
        (
            [id] => 5
            [parent] => 0
            [name] => Category E
            [subcategories] => Array
                (
                )

        )

    [5] => Array
        (
            [id] => 6
            [parent] => 2
            [name] => Subcategory F
            [subcategories] => Array
                (
                )

        )

    [6] => Array
        (
            [id] => 7
            [parent] => 2
            [name] => Subcategory G
            [subcategories] => Array
                (
                )

        )

    [7] => Array
        (
            [id] => 8
            [parent] => 3
            [name] => Subcategory H
            [subcategories] => Array
                (
                )

        )

    [8] => Array
        (
            [id] => 9
            [parent] => 4
            [name] => Subcategory I
            [subcategories] => Array
                (
                    [0] => Array
                        (
                            [id] => 10
                            [parent] => 9
                            [name] => Subcategory J
                            [subcategories] => Array
                                (
                                )

                        )

                )

        )

    [9] => Array
        (
            [id] => 10
            [parent] => 9
            [name] => Subcategory J
            [subcategories] => Array
                (
                )

        )

)
=== TREE ===
Array
(
    [0] => Array
        (
            [id] => 1
            [parent] => 0
            [name] => Category A
            [subcategories] => Array
                (
                )

        )

    [1] => Array
        (
            [id] => 2
            [parent] => 0
            [name] => Category B
            [subcategories] => Array
                (
                    [0] => Array
                        (
                            [id] => 6
                            [parent] => 2
                            [name] => Subcategory F
                            [subcategories] => Array
                                (
                                )

                        )

                    [1] => Array
                        (
                            [id] => 7
                            [parent] => 2
                            [name] => Subcategory G
                            [subcategories] => Array
                                (
                                )

                        )

                )

        )

    [2] => Array
        (
            [id] => 3
            [parent] => 0
            [name] => Category C
            [subcategories] => Array
                (
                    [0] => Array
                        (
                            [id] => 8
                            [parent] => 3
                            [name] => Subcategory H
                            [subcategories] => Array
                                (
                                )

                        )

                )

        )

    [3] => Array
        (
            [id] => 4
            [parent] => 0
            [name] => Category D
            [subcategories] => Array
                (
                    [0] => Array
                        (
                            [id] => 9
                            [parent] => 4
                            [name] => Subcategory I
                            [subcategories] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 10
                                            [parent] => 9
                                            [name] => Subcategory J
                                            [subcategories] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

    [4] => Array
        (
            [id] => 5
            [parent] => 0
            [name] => Category E
            [subcategories] => Array
                (
                )

        )

)


Create a new paste based on this one


Comments:
posted by kalem287 on Jun 12
v.nice bro.thnx for this usefull post.
reply
posted by phamhuusam on Jun 28
so good, thanks!
reply
posted by iamharish15 on Nov 2
cool! Can anyone help with how to display such tree structured array in html table? Like any php function to create row markup that we can send to the PHP view pages or any other ideas?
reply