请问php中当array只有一个元素时是不是退化成了Object?

我现在使用simplexml_load_file将xml配置文件转化为array。xml中有一个元素可能为这样:

 <element id="1"><item id="10"/></element>

实际使用时可能会有多个element配置可能也只有一个。使用foreach进行遍历。
经测试发现,当element有多个时,foreach是正常的,每个element都能遍历一次。
但是当element只有一个时,xml2arry结果貌似就会将element变为一个Object,
foreach遍历时,会分别遍历@Attribute和item两个element的内部对象,而不是
预期额遍历element一次。但是此时使用is_array判断element时,显示为true,
然而使用json_encode或者print_r打印出来又的确显示是没有最外部的[]括号,表明它
并不是一个array。
作为一个外行刚进入php的人来说不是太懂,请问有没有人能帮忙解释一下

补充:
使用simplexml_load_file之后,使用json_decode(json_encode((array)$xml), true);
后面true转换为了关联数组(惑)?不懂什么是关联数组,可以解释一下吗

0

4个回答

当array只有一个元素时是不是退化成了Object
不会,一个元素的Object还是这个数组本身。而不是其中那唯一的元素。

0

依然是数组,即时是空,也依然是数组

0

关联数组指的是 数组的下标是你自己分配,有意义的 比如:
$info=array(
'name'=>'张三',
'age'=>10,
'sex'=>'男'
)
索引数组的下标一般是自然下标 例如:
$num=array(1,2,3,4);

$num[0]=1;
$num[1]=2;
$num[2]=3;

0
stophin
stophin 谢谢解答。转成关联数组后,如果element有2个,使用foreach遍历为2个element;但是当element只有1个时,用foreach遍历显示为@attribute和item这2次遍历,导致xml读取不能正常进行!请问这是bug吗
5 个月之前 回复

还是array 不是Object

0
stophin
stophin 不,你试试转成关联数组,当原来对象只有一个array元素的时候转成关联数组以后foreach会拿里面的属性进行循环
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!