Php xml解析:标记应该是数字数组吗?

Php xml解析:标记应该是数字数组吗?,php,xml,arrays,recursion,traversal,Php,Xml,Arrays,Recursion,Traversal,而在后者中,其格式为: <fields> <rule whatever="lolcats" /> <rule whatever="lolcats" /> </fields> Array ( [field] => Array ( [@attributes]... 我在这里要说的是,它以数字的方式索引子xml元素,这是我想要的,但只有当子xml元素超过1时。有没有想过要改变什么,

而在后者中,其格式为:

<fields>
    <rule whatever="lolcats" />
    <rule whatever="lolcats" />
</fields>
Array
(
    [field] => Array
        (
            [@attributes]...
我在这里要说的是,它以数字的方式索引子xml元素,这是我想要的,但只有当子xml元素超过1时。有没有想过要改变什么,让它们始终以数字形式索引,而不是直接引用唯一元素的@attributes数组


任何帮助都将不胜感激:D

你不能有一个元素或属性是
int
,因此只需测试数组键
0
,然后锻造你期望的数组就可以了。

轰!我花了几个小时来处理下面的代码,最后把它从编辑器中删除了!诀窍是在变量之间循环,值是引用,如果它确实是一个对象,但键不是“@attributes”(如上所述),则将其包装在一个数组中:D

Array
(
    [field] => Array
        (
            [0]...

我试过了。convert函数很快就会变得非常混乱。还有其他想法吗?
Array
(
    [field] => Array
        (
            [@attributes]...
Array
(
    [field] => Array
        (
            [0]...
/**
 * convert function. Converts a SimpleXMLElement object to an associative array, usable for iteration
 * 
 * @see http://www.if-not-true-then-false.com/2009/12/php-tip-convert-stdclass-object-to-multidimensional-array-and-convert-multidimensional-array-to-stdclass-object/
 * @access private
 * @static
 * @param mixed $node node to convert to a non-object based value
 * @return array associative array of the passed in node/object, ultimately representing the initially passed in object as an associative array
 */
private static function convert($node) {
    if(is_object($node)) {
        $vars = get_object_vars($node);
        foreach($vars as $key => &$var) {
            if($key!=='@attributes' && is_object($var))
                $var = array($var);
        }
        $node = $vars;
    }
    if(is_array($node))
        return array_map(array('self', 'convert'), $node);
    return $node;
}