Converting string representation of a directory to multi-dimensional array

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux