On Wed, 2006-08-09 at 14:14 -0400, [EMAIL PROTECTED] wrote: > My brain is really fried right now and I'm sure someone has a more indepth > answer/opinion on this subject, but it occurs to me that you can get away > from using eval() if you do some kind of recursive function using: > > $temp[] = array($arrval1, $arrval2,...); > > > and $arrval1 could == array($arr2val1, $arr2val2,...); > > > using the [] syntax and/or assigning arrays to other array value positions > could do what you want it to do if you can work out the resursive > functionality. No need to use strings and eval() all over the place. > > Sorry my head's not up to resursion right now.. plus I never did have as > intuitive of a feel for it as I'd ever have liked (understand the concept and > can grok other people's stuff, but never bothered writing any of my own); > > Maybe that's a nudge in the right direction while the others finish lunch or > coffee or whatever. > > -TG > > = = = Original message = = = > > 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); > > > > Using eval() for it seems a bit expensive to me. So I've been wondering if > there is an easier way?
Yep, that's pretty bad use of eval() :) Instead use recursion or a sliding reference: <?php $key = '1_20-2_16-7_14'; $val = 12; $bits = split( '_|-', $key ); $nested = array(); $ref = &$nested; $lastref = null; foreach( $bits as $bit ) { $lastRef = &$ref; $ref[$bit] = array(); $ref = &$ref[$bit]; } if( $lastRef === null ) { $nested = $val; } else { $lastRef[$bit] = $val; } print_r( $nested ); ?> Cheers, Rob. -- .------------------------------------------------------------. | InterJinn Application Framework - http://www.interjinn.com | :------------------------------------------------------------: | An application and templating framework for PHP. Boasting | | a powerful, scalable system for accessing system services | | such as forms, properties, sessions, and caches. InterJinn | | also provides an extremely flexible architecture for | | creating re-usable components quickly and easily. | `------------------------------------------------------------' -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php