Aha, strukturfelet i arrayen var mitt fel, ersätte alla värden med "Micke" i mitt exempel och då blev det fel. Jag är inte helt med på vad du menar med att skippa "str_replace". Det fungerar ju att sätta ROOTPATH sålänge man befinner sig på "nivå 1", men om man är på t.ex. nivå 4 och sen ska fortsätta till nivå 3 blir det väl fel?
Hmm? ROOTPATH är ju defaultvärdet och används när du inte skickar med en andra parameter. Den biten fungerar precis likadant som innan.
Notera att det enda jag har gjort med första raden är att byta namn på parametern från $Path till $LocalPath. Detta för att spara undan vilket värde som skickades till funktioen. Sedan en rad som i varje iteration av loopen skapar ett nytt värde för $Path.
Vad du gör istället för att spara undan det medskickade värdet är att först plussa på undermappen i varje iteration och sedan plocka bort undermappen från den påplussade strängen. Fult.
För att sätta mitt förslag i sitt sammanhang:
function CreateFolders($Data = array(), $LocalPath = ROOTPATH){
foreach($Data as $Key => $User){
// Det nya värdet av $Path är inte längre beroende av det gamla värdet av $Path
$Path = $LocalPath . $User['Slug'] . "_" . $User['Id'] . "/";
@mkdir($Path);
echo $Path . "<br />";
if(sizeof($User['Children']) != 0){
CreateFolders($User['Children'], $Path);
}
}
}