Re: create multidimensional array with n depth

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

 



Gunter Sammet wrote:
> Hi all:
> I've been trying to create a multidimensional array with n depth in php. 
> Tried to use a recursive function passing array references by pointers but 
> seems like it's not possible or I still don't understand this subject 
> enough. Finally managed to get it going using the eval function. The code 
> below converts a seperated string into a multi dimensional array with n 
> depth:
> 
> e.g. $array['1_20-2_16-7_14'] = 12 will become 
> $eval_array[1][20][2][16][7][14] = 12
> 
>       foreach(array_keys($this->quantity_array) AS $key){
>         if($this->quantity_array[$key] > 0){
>           $combinations = explode('-', $key);
>           $eval_string = '$eval_array';
>           foreach(array_keys($combinations) AS $key2){
>             $option_key_value = explode('_', $combinations[$key2]);
>             $eval_string .= 
> '['.$option_key_value[0].']['.$option_key_value[1].']';
>           }
>           $eval_string .= ' = '.$this->quantity_array[$key].';';
>           eval($eval_string);

the following 5 lines were contributed by my 2 yo.

>         	1112`11q\|		`1@
]1


qA|]
]"A||z\'\'sas
}
>       }

something like (I use a simalar technique to
manage 'namespaced' data stored in $_SESSION):

// input
$array = array(
        "1_20-2_16-7_14" => 12,
        "1_20-1_17-5_12" => 13,
        "1_20-0_18-3_11" => 12,
);
// output
$ML    = array();
//process
foreach ($array as $keys => $val) {
    // grab a ref to the root of the output array
    $tmp  =& $ML;
    // get keys we want to build from - hackish but will do for this example
    $keys = explode("_", str_replace("-","_",trim($keys)));
    // build from the list of keys
    foreach ($keys as $k) {
        if (!isset($tmp[$k]))
            $tmp[$k] = array();
        $tmp =& $tmp[$k];
    }
    // stick the value into the deepest array.
    $tmp = $val;
}
// display output
var_dump($ML);

> 
> Using eval() for it seems a bit expensive to me. So I've been wondering if 

indeed - if your using eval() then there is pretty much always a better way;
unless there isn't and then you probably don't need any help from this list :-)

> there is an easier way?

dunno, but there is usually a highway. ;->

> TIA
> 
> Gunter 
> 

-- 
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