On Mon, 2008-10-27 at 02:09 -0400, Robert Cummings wrote: > On Sun, 2008-10-26 at 22:39 -0700, Jim Lucas wrote: > > > > Even slimmer > > > > <?php > > > > $node = '[5][1][]'; > > $text = 'some text'; > > > > preg_match_all('|\[([^\]\[]*)\]|', $node, $matches, > > PREG_PATTERN_ORDER); > > > > $recursive = $matches[1]; > > > > $recursive = array_reverse($recursive); > > > > foreach ( $recursive AS $index ) { > > > > $out = array(); > > > > $out[(int)$index] = $text; > > > > $text = $out; > > > > } > > > > print_r($out); > > ?> > > It's buggy... you need to test for an blank string to properly handle > the append to array case when the index is blank []. > > <?php > > $node = '[5][1][]'; > $text = 'some text'; > > preg_match_all( > '|\[([^\]\[]*)\]|', $node, $matches, PREG_PATTERN_ORDER ); > > $recursive = $matches[1]; > $recursive = array_reverse($recursive); > > foreach( $recursive AS $index ) > { > $out = array(); > > if( trim( $index ) === '' ) I probably shouldn't trim... since we're not supporting quotes in any way, it might be desirable to have a key that is one or more spaces... for whatever reason :) Personally, I have a similar implementation I use all the time, but I use forward slashes to separate keys. <?php hashPathSet( $hash, 'this/is/the/hash/path', $value ) ?> Cheers, Rob. > { > $out[] = $text; > } > else > { > $out[$index] = $text; > } > > $text = $out; > } > > print_r( $out ); > > ?> > > I also removed the (int) cast since integer keys will be cast > automatically by PHP and then it will have support for text keys also. > -- http://www.interjinn.com Application and Templating Framework for PHP -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php