Page 1 of 1

Dynamic Multi-Dem Array

Posted: Tue Jun 13, 2006 3:53 pm
by hawleyjr
I'm pretty sure I've done this before...I'm just not getting it to work as I want.

I have an array:

Code: Select all

<?php
$aTest = array('level1','level2','level3','level4');
With the values of the array. I would like to create a multi-dem array such as:

Code: Select all

<?php
$aTest2['level1']['level2']['level3']['level4'] = array();
?>
Any ideas?

Posted: Tue Jun 13, 2006 4:02 pm
by TheMoose
Like this?

Code: Select all

$aTest = array('level1' => array('level2' => array('level3' => array('level4' => array()))));

Posted: Tue Jun 13, 2006 4:06 pm
by hawleyjr
TheMoose wrote:Like this?

Code: Select all

$aTest = array('level1' => array('level2' => array('level3' => array('level4' => array()))));
That would produce what I'm trying to do however, it doesn't answer the question of how do I go from :

Code: Select all

$aTest = array('level1','level2','level3','level4');
To:

Code: Select all

$aTest2['level1']['level2']['level3']['level4'] = array();

Posted: Tue Jun 13, 2006 4:22 pm
by TheMoose
Not the most secure, but it works:

Code: Select all

$aTest = array('level1', 'level2', 'level3', 'level4');
$aTest2 = array();
$str = "$" . "aTest2";
for($i=0;$i<count($aTest);$i++) {
	$str .= "['" . $aTest[$i] . "']";
}
$str .= " = array();";
eval($str);

Posted: Tue Jun 13, 2006 4:33 pm
by hawleyjr
You may be onto something using eval() however, it still doesn't produce the desired result...

Posted: Tue Jun 13, 2006 4:35 pm
by feyd

Posted: Tue Jun 13, 2006 4:40 pm
by hawleyjr
Thanks Feyd, I can work off of that :)

Code: Select all

$in = array('level1', 'level2', 'level3', 'level4','');

function storeInto($a) {
        $aLast = count($a) - 1;
        $result = array($a[$aLast]);
        for($i=$aLast-1;$i>=0;$i--) {
                $result = array($a[$i] => $result);
        }
        return $result; 
}

$out = storeInto($in);
print_r($out);
Will produce:

Code: Select all

Array
(
    [level1] => Array
        (
            [level2] => Array
                (
                    [level3] => Array
                        (
                            [level4] => Array
                                (
                                    [0] => 
                                )

                        )

                )

        )

)