PHP的坑XML转JSON

<?php
/**
这是第一段XML
<?xml version="1.0" encoding="utf8"?>
<list>
    <item>
        <name>Hamm</name>
        <site>Hamm.cn</site>
    </item>
    <item>
        <name>Hamm</name>
        <site>Hamm.cn</site>
    </item>
</list>
**/

/**
这是第二段XML
<?xml version="1.0" encoding="utf8"?>
<list>
    <item>
        <name>Hamm</name>
        <site>Hamm.cn</site>
    </item>
</list>
**/

//上面有两段XML,是item项目分别为1个和2个数组元素的XML包体
//我们遇到的问题是,当XML中数组元素为1时,我们按下面的代码解析
//得到的数据,并不是一个数组,而是一个对象
$obj = simplexml_load_string($xmlstring);  
$arr = json_decode(json_encode($obj));
$list = $arr->item;
print_r(json_encode($list));
//第一个XML输出
//[{"name":"Hamm","site":"Hamm.cn"},{"name":"Hamm","site":"Hamm.cn"}]
//第二个XML输出
//{"name":"Hamm","site":"Hamm.cn"}
//上面的区别很容易看到 XML中单个元素并不被认为是只有一个元素的数组
//而是直接给解析成了一个对象
//那么,如何正确的解析一个XML中的数组呢?下面的代码可以试试
$obj = simplexml_load_string($xmlstring);  
$arr = json_decode(json_encode($obj));
$list = $arr->item;

$arrList = [];
if(is_array($list)){
    foreach($list as $item){
        array_push($arrList,$item);
    }
}else{
    $item = $list;
    array_push($arrList,$item);
}
print_r(json_encode($arrList));
//这样 第一个XML输出
//[{"name":"Hamm","site":"Hamm.cn"},{"name":"Hamm","site":"Hamm.cn"}]
//同时 第二个XML输出
//[{"name":"Hamm","site":"Hamm.cn"}]

//到此为止,我们可以这么解析来满足一个统一的数据结构了。
//这个坑今天在转的时候发现了,这里记录一下。