Hi Simon, This will surely help since I already use simplexml and my config files use this construct.
Darby, Is it 'safe' to use this? I.e can I expect this patch or the functionality to be available in future Zend releases? On Dec 7, 2007 7:02 PM, Simon Mundy <[EMAIL PROTECTED]> wrote: > We modified Zend_Config_Ini to allow the use of numeric keys. I wonder if > there's something similar we can do here? > > > I've made a small patch if you're interested:- > *Zend/Config/Xml.php* > =================================================================== > --- Xml.php (revision 6921) > +++ Xml.php (working copy) > @@ -137,10 +137,18 @@ > if (count($xmlObject->children())) { > foreach ($xmlObject->children() as $key => $value) { > if ($value->children()) { > - $config[$key] = $this->_toArray($value); > + $value = $this->_toArray($value); > } else { > - $config[$key] = (string) $value; > + $value = (string) $value; > } > + if (isset($config[$key])) { > + if (!is_array($config[$key])) { > + $config[$key] = array($config[$key]); > + } > + $config[$key][] = $value; > + } else { > + $config[$key] = $value; > + } > } > } else { > // object has no children: it's a string > > Essentially it looks for existing keys whilst the array is being built - > if the key already exists it transforms the value into a numeric array > instead of a string value. > > I tested it with the following config:- > > <root> > <foo> > <bar>Item 1</bar> > <bar>Item 2</bar> > <bar>Item 3</bar> > <bar>Item 4</bar> > <bar>Item 5</bar> > <item>3</item> > <item>2</item> > <mail> > <name>My name</name> > </mail> > </foo> > </root> > > ...and it gives the following output:- > > Zend_Config Object > ( > [_allowModifications:protected] => > [_index:protected] => 0 > [_count:protected] => 3 > [_data:protected] => Array > ( > [bar] => Zend_Config Object > ( > [_allowModifications:protected] => > [_index:protected] => 0 > [_count:protected] => 5 > [_data:protected] => Array > ( > [0] => Item 1 > [1] => Item 2 > [2] => Item 3 > [3] => Item 4 > [4] => Item 5 > ) > > [_loadedSection:protected] => > [_extends:protected] => Array > ( > ) > > ) > > [item] => Zend_Config Object > ( > [_allowModifications:protected] => > [_index:protected] => 0 > [_count:protected] => 2 > [_data:protected] => Array > ( > [0] => 3 > [1] => 2 > ) > > [_loadedSection:protected] => > [_extends:protected] => Array > ( > ) > > ) > > [mail] => Zend_Config Object > ( > [_allowModifications:protected] => > [_index:protected] => 0 > [_count:protected] => 1 > [_data:protected] => Array > ( > [name] => My name > ) > > [_loadedSection:protected] => > [_extends:protected] => Array > ( > ) > > ) > > ) > > [_loadedSection:protected] => > [_extends:protected] => Array > ( > ) > > ) > > > Hope this is helpful > > > There are several mismatches between INI and XML formats, so it's no > surprise that we must treat each a bit differently. How would having > multiple values work in INI, or would we not support this? > > Numeric tag names make illegal XML, so we already have functionality in > Zend_Config_Ini that is not supported with Zend_Config_Xml. > > In principle, I have no objection to adding such support. > > Thanks, Rob! > > > -- > > Simon Mundy | Director | PEPTOLAB > > """ " "" """""" "" "" """"""" " "" """"" " """"" " """""" "" " > > *PeptoLab will be closed:* > *Saturday 15th December through until Monday 17th December * > *Saturday 22nd December through until Wednesday 2nd January* > *For urgent requests, please call 0438 046 061* > * > *202/258 Flinders Lane | Melbourne | Victoria | Australia | 3000 > Voice +61 (0) 3 9654 4324 | Mobile 0438 046 061 | Fax +61 (0) 3 9654 4124 > http://www.peptolab.com > >