2 stophin stophin 于 2018.09.14 19:30 提问

请问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转换为了关联数组(惑)?不懂什么是关联数组,可以解释一下吗

4个回答

caozhy
caozhy   Ds   Rxr 2018.09.15 11:29

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

MZ911118
MZ911118   2018.09.15 16:42

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

MZ911118
MZ911118   2018.09.15 16:50

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

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

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

还是array 不是Object

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
当range是Object Array时,picker 中range-key中的值必须带单引号
如:&amp;lt;picker bindchange=&quot;bindPickerChange&quot; range-key=&quot;{{'name'}}&quot; value=&quot;{{objectArray[index].id}}&quot; range=&quot;{{objectArray}}&quot; class='merchant_type_picker' name='merchant_type' &amp;gt;          &amp;lt;view&amp;gt;
怎么判断一个object是否是数组(array)?
方法一function isArray(obj){ return Object.prototype.toString.call(obj) === '[Object Array]'; }使用call来使 toString 中 this 指向 obj 方法二function isArray(obj){ return obj.__proto__ === Array.prototype; }
给object数组进行排序(排序条件是每个元素对象的属性个数)
示例数据: var book={ page:400 } var car={ color:"red", door:"four" } var person={ name:"dpd", age:26, height:175 } var oArray=[car,person,book]; 思路是使用数组的排序方法 sort() ,该方法接收一
php如何从数组中删除一个元素
(原文:http://stackoverflow.com/questions/369602/how-to-delete-an-element-from-an-array-in-php) It should be noted that unset() will keep indexes untouched, which is what you'd expect when usi
PHP中把stdClass Object转array的几个方法
我们在经常使用API接口获取数据返回json数值的时候,往往单纯通过json_decode方法解析获得得数值一般并非数组,而是带有stdClass Objec的对象字符串,这时如果我们想获取相应的PHP数组时,需通过以下几种方法来获取。 方法一: //PHP stdClass Object转array   function object_array($array) {       if
form中只有一个input元素时按回车默认提交表单
WEB开发中,如果页面中只有一个input元素,在该input元素的输入框中按回车(注:此时并没有写对应的onkeydown等事件处理),则浏览器会默认提交表单,请看如下代码: [xhtml] view plaincopyprint? html>       head>           title>页面中只有一个input元素时默认提交表
php获取数组的最后一个元素
php获取数组的最后一个元素的方法。使用php内置函数end()。end() 函数将数组内部指针指向最后一个元素,并返回该元素的值(如果成功)。例如:$args=Array('www','phpernote','com'); echo end($args);//com相关的方法: current() - 返回数组中的当前元素的值 next() - 将内部指针指向数组中的下一个元素,并输出 pr
PHP向数组中添加元素
PHP向数组中添加元素的方式有两种: array_push() , $arr[] 第一种: $arr = array(); array_push($arr, e1, e2 ... en); 第二种: $arr = array(); $arr[] = e1; $arr[] = e2; ... $arr[] = en; 第二种方法相对于第一种方法会快很多
C语言中,数组名作为参数传递给函数时,退化为指针
C语言中,数组名作为参数传递给函数时,退化为指针;需要数组大小时,需要一个参数传数组名,另一个传数组大小。 数组名做函数参数时,就相当于指针了。sizeof对指针操作结果应该是4。   一般函数参数为数组时,可以有两个参数,一个数组名,一个数组长度的。 首先C语言里面不支持数组作为形参来进行调用 例如函数void fun(int a[]);里面的a实际上在进行编译时,是作为
php删除数组中某元素
方法一: 复制代码 代码如下: $arr1 = array(1,3, 5,7,8); $key = array_search(3, $arr1); if ($key !== false)     array_splice($arr1, $key, 1); var_dump($arr1); ?> 输出: array(4) { [0]=> int(1) [1]=> int(5