请问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个回答

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

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

关联数组指的是 数组的下标是你自己分配,有意义的 比如:
$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吗
大约一年之前 回复

还是array 不是Object

stophin
stophin 不,你试试转成关联数组,当原来对象只有一个array元素的时候转成关联数组以后foreach会拿里面的属性进行循环
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何判断一个object是不是array
1 从原型入手,Array.prototype.isPrototypeOf(obj);利用isPrototypeOf()方法,判定Array是不是在obj的原型链中,如果是,则返回true,否则返回false。这里是判断括号里的元素是不是前边的类型var obj = {};var arr = [];if(Array.prototype.isPrototypeOf(obj)){ console.lo...
当dropDownList中只有一个可选项时……
我的程序中需要一个dropDownList列出一些信息,然后用户选择不同的项执行不同的代码。目前我是通过dropDownList的selectedChanged方法来实现的,但是我发现当dropDownList中只有一个选项的时候,用户是无法将他选中的,不知道大家注意到这个问题了没有,有什么好的解决办法吗?rn (注:如果我不想为dropDownList添加一个空项的话)
php array 取元素函数
<?php $people = array("Bill", "Steve", "Mark", "David"); echo current($people) . ""; // 当前元素是 Bill echo next($people) . ""; // Bill 的下一个元素是 Steve echo current($people) . ""; // 现在当前元素是 Steve echo pre
js 中有趣的Object 和Array
Object function a(){}let b={a} {a: ƒ} let c=120 let b={c}{c:120}变量和函数都可以变成对象的键值对 Arraylet a=[] a[‘b’]=500 [b: 200] a[‘c’]=2000 [b: 200, c: 2000] 但这时 a.length===0 这就感觉是PHP 关联数组 ,不过 js的
php object或者array如何转换成string
做php数据库查询的时候有两个函数rnoci_fetch_object和oci_fetch_array(),分别返回object和array类型的返回值,我现在需要一个string类型的,如何转换?rnrnrn$results = "[";rn$row = oci_fetch_array($stmt); <-这里用oci_fetch_object也可以rn$results += ??? <-这里如果将返回值$row转换成string类型的,我试过(string)不行rn$results = "]";rn
为什么页面只有[object Object][object Object]
js代码如下rn$(function () rn var $li=$('#ul1 li');rnrn var ilen=$li.length;rn var $div=$(' ')rn $.ajax(rn type:'get',rn url:'getPics.php',rn dataType:'json',rn data:"cpage":1,rn success:function (data) rnrn for(var i=0;i
Php 中Array的坑
刚开始以为php中的Array和Java中的Map差不多,但是实际是Set,即键不能重复,要重复的话,后面的键值对会覆盖前面的。 比如我要如下图效果: 我开始先定义一个数组: echo "php array key相同,后面数据会覆盖前面数据:"; $carsDic = array("德系"=>"宝马","日系"=>"丰田","德系"=>"奔驰"); foreach($car
当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;
JS数组”(array)和“对象”(object)
转载: http://lgr310-163-com.iteye.com/blog/745861 JS数组”(array)和“对象”(object)          比如有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后你运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么我到底该用哪一种...
object对象复制 / array复制
00、深度拷贝 这里有三点需要注意: 1、用new obj.constructor ()构造函数新建一个空的对象,而不是使用{}或者[],这样可以保持原形链的继承; 2、用obj.hasOwnProperty(key)来判断属性是否来自原型链上,因为for..in..也会遍历其原型链上的可枚举属性。 3、上面的函数用到递归算法,在函数有名字,而且名字以后也不会变的情况下,这样定义没有问题。但问题...
Array 装换成 Object
请问如何才可以把数组转换成一个Object,大家多多指点 ^_^
php强制转换中(array)和(object)妙用,关联数组与对象快速转换
(array) class Pre1 { private $name = 'aaa' ; private $age = 100; } class Pre2 extends Pre1 { private $name= 'bbb' ; public $age= 111; } var_dump ((array) new Pre2 ()); 得到结...
php中把stdClass Object转array的几个方法
方法一: 复制代码代码如下: //PHP stdClass Object转array   function object_array($array) {       if(is_object($array)) {           $array = (array)$array;        } if(is_array($array)) {            foreach
PHP中把stdClass Object转array的几个方法
PHP和JS通讯通常都用json,但用 json 传过来的数组并不是标准的array,而是 stdClass 类型。那么我们可以参考下面的几个方法进行转换。 方法一: //PHP stdClass Object转array function object_array($array) { if(is_object($arra...
引用类型之Object和Array学习
引用类型 /** * @ object类型 * 创建object 实例的两种方式 */   // 1.使用new操作符后跟object构造函数 var person = new Object(); person.name = 'kangkang'; person.age = '23'; // 2.使用对象字面量表示法 (目的在于简化创建包含大量属性的对象的过程)
object[] array 内容显示
该怎么显示出数组内的内容呢,var arr = (int[])bname;不行啊 rn[img=https://img-bbs.csdn.net/upload/201607/01/1467361044_412944.png][/img]
Object中的tostring与Array中的tostring的区别?
Object中的tostring与Array中的tostring的区别? 1.Object类的toString方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at标记符号“@” 和此对象哈希码的无符号十六进制表示组成。Arrays的toString方法是返回指定数组内容的字符串表示形式。 2.两者是重名函数关系,没有复写。 从意会角度讲,这就好比牛喝水和你喝水,虽然都...
PHP中把stdClass Object转array的几个方法
我们在经常使用API接口获取数据返回json数值的时候,往往单纯通过json_decode方法解析获得得数值一般并非数组,而是带有stdClass Objec的对象字符串,这时如果我们想获取相应的PHP数组时,需通过以下几种方法来获取。 方法一: //PHP stdClass Object转array   function object_array($array) {       if
python元组中只有一个元素的问题
在python中,元组中只报元素时,调用时发现竟然变成了元素值 例如: a=(2) print(a) 2 解决方法:在元素后面添加逗号(,) a=(2,) print(a) (2,) 猜测原因:认为是运算公式
怎么判断一个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; }
Python 元组只有一个元素
Python中,定义一个元组只有一个元素的时候,写成 tuple=(1,)其中的逗号不可少。 print((1,)) -----结果----- (1,) print((1)) -----结果----- 1 如果写成(1)这样的话,python解释为数据1,而非元组。  ...
OpenGL中VAO(vertex array object)介绍
详细介绍了OpenGL中的新特性VAO(Veretx Array Object)的使用入门。它只在OpenGL3.X以上的版本中才有。
只有一个元素的异步FIFO
module one_entry_fifo #(parameter dw=16 )( input rd_clk, wr_clk, rd_rst_n,wr_rst_n,we,re, input [dw-1:0] d ,reset_value, output reg [dw-1:0] q , output reg empty...
Array,Object中那些容易走入的误区
在javascript操作Array和Object对象的时候有一些误区是很容易走入的,尤其是那些指针问题,虽然说javascript中并没有像C语言那样的指针操作,但是这并不代表了javascript中就根本没有用到指针,其实在javascript中是有指针的,只是内部被封装好了,不用程序员自己再去手动敲写罢了。 容易犯的错误1: 以下面的例子为例来说明,下面的例子是用javascri
创建只有一个元素的元组
创建只有一个元素的元组需要这样: ('xyz',) 如果只是 ('xyz') 的话,则 >>>type(('xyz')) 可以看到,这是一个字符串,而不是元组。 这是因为括号被重载了,它也被用作分组操作符。 由圆括号包裹的一个单一元素首先被作为分组操作,而不是作为元组的分解符。 所以下面的方法才行 >>> type(('xyz',))
js中数组(array)和对象(object)的区别
object 类型: 创建方式: /*new 操作符后面Object构造函数*/ var person = new Object(); person.name = "lpove"; person.age = 21; /*或者用对象字面量的方法*/ var person = { name: "lpove"; age : 21; } - array类型创建方式: `var col
请问netBeans是不是集成了tomcat5.5的功能?
我以前都是用UltralEdit编辑jsp,今天刚刚下载了nb5.5,我试着做web项目好象直接可以调试jsp程序,并不需要运行tomcat?请高手指教是怎么回事?
请问.net2.0 是不是集成了ajax开发包?
请问.net2.0 是不是集成了ajax开发包?
php中常用array函数
常用函数: array_map 匹配需要的值,组装新的函数 $array  =  array_map(function($value){ return array_pluck($value, 'y'); }, $array); 当$value是数组的时候同样可以操作:  $categories = array_map(             function($value){
删除array元素
[code=&quot;flex&quot;] public function deleteArray(array:Array,label:String):Array { for(var i:int=0;i
PHP中常用的array操作
数组内容去重 $a = [1,2,3,3,4,5,5,5,7,4]; $result = array_unique($a); //$result = [1,2,3,4,5,7]; 数组中是否存在某个键 if(array_key_exists('key', $array)) { //do something } 查找一个值在数组中的位置 $position = array_sear...
php中switch 当case为一个范围时
在php中,想要switch的case条件为区间范围的话,使用 0 < $um < 50,这种方式是不可以的,所以要用 0 < $num && $num < 50的方式,拆开写才可以
array增删元素
array增删元素var array = [0,1,2,3]; //声明一个数组var str = &quot;4&quot;; //声明一个元素//给数组添加固定类型的元素array.push(parseInt(str));//从数组中删除某一元素var i = array.indexOf(parseInt(str)); //找出这个值在数组中的下标位置arry.splice(i,1); //将该元素删除//将数组...
vc6中是不是没有 ,只有?
谁有vc6最新类库方面的资料吗?
new Array 与new Array()是不是一样的啊
我看有些地方的代码直接new Array
JS Boolean,Array,Object的基础知识
Boolean console.log(true); //true console.log(false); //false console.log(0); //0 console.log(1); //1 console.log(2); //2 console.log(!0); //true console.log(!1); //false console.log(!2); //false c...
Cannot use object of type ... as array
Fatal error: Cannot use object of type countries_search as array in F:\AppServ\www\smg\application\models\TrackAction.php on line 24rnrn请问出现这样的提示一般是因为什么?rnrnps:rn1,不会是因为程序问题,程序应该是对的,不是由于把object当数组来调用导致的,因为我们服务器上运转完全正常,我只是把代码copy到我电脑的环境里就不行了rn2,不会是因为Php或apache版本的原因,因为和服务器是一样的rn3,服务器的系统是solaris,我电脑是xp+appservrnrn望高手指教
《javascript高级程序设计》——引用类型之Object、Array
Object1.创建Object实例的方式有两种:var person=new Object(); person.name="zx"; person.age=19;对象字面量表示法:var person={ name:"zx", age:19 };住意每两个属性中间用逗号分隔,最后一个属性后面没有逗号,结尾要加分号。 2.访问对象属性时,可以使用点表示法,也可以使用方括号表示法。在使
排序排序 array to object?? attachment
NULL 博文链接:https://mlaaalm.iteye.com/blog/695198
object类型转换为Array类型
 将一个对象转换成数组 var obj = {a: 1, b: 2, c: 3}; // .... var arr = []; for(var key in obj){ if(!obj.hasOwnProperty(key)){ continue; } var item = {}; item[key] = obj[key]; a...
相关热词 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天 c#func链接匿名方法 c#怎么创建文件夹 c#从键盘接收空格 c#da/ad c#部门请假管理系统 c#服务器socket c# 默认的访问修饰符