Children nodes moved to the root level on an hierarchy array

I have the following array on a hierarchy structure - It's basically an array with categories and its children under the 'child' key:

Array
    (
        [category_id] => 1
        [parent_id] => 0
        [name] => Commercial
        [child] => Array
            (
                [0] => Array
                    (
                        [category_id] => 48
                        [parent_id] => 1
                        [name] => lights
                        [child] => Array
                            (
                            )
                    )

                [1] => Array
                    (
                        [category_id] => 12
                        [parent_id] => 1
                        [name] => beacons
                        [child] => Array
                            (
                                [0] => Array
                                    (
                                        [category_id] => 91
                                        [parent_id] => 12
                                        [name] => blue beacons
                                        [child] => Array
                                            (
                                            )

                                     )
                            )

                    )
            )
    )

What I am trying to do is write a recursive function to reorganize this array as an ONE LEVEL array only. Instead of having its children inside the 'child' key, I want it to be part of the array root level. Like this:

[0] => Array
    (
        [category_id] => 1
        [parent_id] => 0
        [name] => Commercial
    )

[1] => Array
    (
        [category_id] => 48
        [parent_id] => 1
        [name] => lights
    )

[2] => Array
    (
        [category_id] => 12
        [parent_id] => 1
        [name] => beacons
    )


[3] => Array
    (
        [category_id] => 91
        [parent_id] => 12
        [name] => blue beacons
    )

Any ideas?

Thanks!

Upvotes: 0

Views: 99

Answers (1)

Sharanya Dutta
Sharanya Dutta

Reputation: 4021

The following recursive function should serve your purpose:

function one_level_array($arr){
$ret = array();
$ret[] = array_diff_key($arr, array("child" => ""));
    if(array_key_exists("child", $arr)){
        foreach($arr["child"] as $child){
        $ret = array_merge($ret, one_level_array($child));
        }
    }
return $ret;
}

DEMO

Upvotes: 1

Related Questions