我碰到SimpleXML对象转换为阵列的这种功能在这里:
/** * function object2array - A simpler way to transform the result into an array * (requires json module). * * This function is part of the PHP manual. * * The PHP manual text and comments are covered by the Creative Commons * Attribution 3.0 License, copyright (c) the PHP Documentation Group * * @author Diego Araos, diego at klapmedia dot com * @date 2011-02-05 04:57 UTC * @link http://www.php.net/manual/en/function.simplexml-load-string.php#102277 * @license http://www.php.net/license/index.php#doc-lic * @license http://creativecommons.org/licenses/by/3.0/ * @license CC-BY-3.0 http://spdx.org/licenses/CC-BY-3.0 */ function object2array($object) { return json_decode(json_encode($object), TRUE); } 因此,我对XML字符串的采用类似于:
function xmlstring2array($string) { $xml = simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA);
$array = json_decode(json_encode($xml), TRUE);
return $array;
} 它工作得很好,但似乎有点黑吗?有没有更有效/更可靠的方法?
我知道SimpleXML对象与数组足够接近,因为它利用了PHP中的ArrayAccess接口,但与多维数组(即循环)一起使用时,仍然不能很好地工作。
谢谢大家的帮助问题来源于stack overflow
我在PHP手册注释中发现了这一点:
/** * function xml2array * * This function is part of the PHP manual. * * The PHP manual text and comments are covered by the Creative Commons * Attribution 3.0 License, copyright (c) the PHP Documentation Group * * @author k dot antczak at livedata dot pl * @date 2011-04-22 06:08 UTC * @link http://www.php.net/manual/en/ref.simplexml.php#103617 * @license http://www.php.net/license/index.php#doc-lic * @license http://creativecommons.org/licenses/by/3.0/ * @license CC-BY-3.0 http://spdx.org/licenses/CC-BY-3.0 */ function xml2array ( $xmlObject, $out = array () ) { foreach ( (array) $xmlObject as $index => $node ) $out[$index] = ( is_object ( $node ) ) ? xml2array ( $node ) : $node;
return $out;
} 它可以帮助您。但是,如果将XML转换为数组,则会丢失可能存在的所有属性,因此无法返回XML并获得相同的XML。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。