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