Over the weekend, I was tasked with taking a string representation of a directory ('\Interface\Addons\<some dir>\<some file>'), which can vary in length (no set number of depths) to a multi-dimensional array (i.e. array('Interface' => array('Addons' => array('<some dir>' => <somefile>)));). We came up with a very ugly hack to do it, but I'm curious if anyone can help us wrap our head around a better solution, without using eval (which we were able to find that solution quickly, but do not want to use eval). Our situation is a little unique in the fact that these files don't actually exist on a filesystem, so it makes it a bit more tough to actually create this array. Thanks for any help you can give in cleaning this up somewhat. Here is the function we currently use: <?php $array = array(); addToList('\interface\addons\clearfont\clearfont.toc2', $array); addToList('\interface\addons\clearfont\clearfont.toc3', $array); addToList('\interface\addons\clearfont\clearfont.toc4', $array); addToList('\interface\addons\clearfont\clearfont.toc5', $array); addToList('\interface\addons\clearfont\subdir\something.toc', $array); function addToList($str, &$array) { $things = explode('\\', $str); if($things['0'] == '') { array_shift($things); } addToArray($things, $array); } function addToArray($things, &$array) { $count = count($things); switch ($count) { case '1': $array[$things['0']] = $array(); break; case '2': $array[$things['0']][$things['1']] = $things['1']; break; case '3': $array[$things['0']][$things['1']][$things['2']] = $things['2']; break; case '4': $array[$things['0']][$things['1']][$things['2']][$things['3']] = $things['3']; break; <<previous code repeated down to 10>> default: break; } } print_r($array); ?> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php