问题
解析前的XML:
<item>
<type>9</type>
<id>3</id>
<pid>0</pid>
<name/>
<value/>
</item>
<item>
<type>9</type>
<id>4</id>
<pid>0</pid>
<name>Intranet</name>
<value>
<ip_range>
<begin>3232235521</begin>
<end>3232301054</end>
</ip_range>
</value>
</item>
<item>
<type>9</type>
<id>837567</id>
<pid>0</pid>
<name>新类别</name>
<value>
<ip_range>
<begin>2130706434</begin>
<end>2130706434</end>
</ip_range>
<ip_range>
<begin>2130706433</begin>
<end>2130706433</end>
</ip_range>
</value>
</item>
解析后的XML:
问题:
一般我们的数据格式都是统一的,以便循环处理数据。第一次遇到这样子的数据我都懵逼了,跑去问c++的同事,能不能让数据格式保持一致。别没有数据的时候参数不见了;只有一个数据的时候参数不是数组,两个及以上的数据参数才是数组。得到的回复是:xml就是这样的。。。
解决方法
以下是尝试过的方法
(1)使用(array)ip_range把参数类型转换为数组,失败。
上图第2个红圈的ip_range确实转换为数组了,但是本就是数组格式的ip_range数据只剩下第一条。。第二条以后的都不见了
(2)使用is_array(ip_range)判断,失败。
不管是第2个红圈还是第3个红圈的ip_range,都会返回false
(3)使用isset(ip_range[0])判断,失败。
不管是第2个红圈还是第3个红圈的ip_range,都会返回true
(4)使用count(ip_range) > 1判断,成功。
灵光一闪通过数组的长度来判断,没想到成功了!!!