Search code examples
phprecursiondepth

Recursive function with unknown depth of values. Return all values (undefined depth)


I have a question about a recursive PHP function. I have an array of ID’s and a function, returning an array of „child id’s“ for the given id.

public function getChildId($id) {
    …
    //do some stuff in db
    …
    return childids;
}

One childid can have childids, too! Now, I want to have an recursive function, collecting all the childids.

I have an array with ids like this:

$myIds = array("1111“,"2222“,"3333“,“4444“,…);

and a funktion:

function getAll($myIds) {

}

What I want: I want an array, containing all the id’s (including an unknown level of childids) on the same level of my array. As long as the getChildId($id)-function is returning ID’s…

I started with my function like this:

function getAll($myIds) {
    $allIds = $myIds;
    foreach($myIds as $mId) {
        $childids = getChildId($mId);

        foreach($childids as $sId) {
            array_push($allIds, $sId);

            //here is my problem.
            //what do I have to do, to make this function rekursive to
            //search for all the childids? 

        }       
    }
    return $allIds;

}

I tried a lot of things, but nothing worked. Can you help me?


Solution

  • I think this code should do the trick

    function getAll($myIds) {
        $allIds = Array();
        foreach($myIds as $mId) {
            array_push($allIds, $mId);
            $subids = getSubId($mId);
    
            foreach($subids as $sId) {
                $nestedIds = getAll($sId);
                $allIds = array_merge($allIds, $nestedIds);
            }       
        }
        return $allIds;
    }