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