请问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吗
10 个月之前 回复

还是array 不是Object

0
stophin
stophin 不,你试试转成关联数组,当原来对象只有一个array元素的时候转成关联数组以后foreach会拿里面的属性进行循环
10 个月之前 回复
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...
怎么判断一个object是否是数组(array)?
方法一function isArray(obj){n return Object.prototype.toString.call(obj) === '[Object Array]';n}使用call来使 toString 中 this 指向 objn方法二function isArray(obj){n return obj.__proto__ === Array.prototype;n}
PHP SimpleXMLElement Object数组转化为普通数组
n n n 做微信第三方接口接入的时候发现接口返回的数据都是xml格式的。n以下是如何把xml格式转化为普通的数组格式取值。nxml格式数据:n$xmlstr=&quot;&amp;lt;xml&amp;gt;n &amp;lt;mch_appid&amp;gt;&quot;.$data['mch_appid'].&quot;&amp;lt;/mch_appid&amp;gt;n &amp;lt;mchid&amp;gt;&quot;.$da...
C++数组的引用—防止数组退化
在c语言中,数组作为函数参数时,实际上数组已经退化为指针使用。 n下面这三种用法是等价的:int f1(int apples[]);nint f1(int apples[10]);nint f1(int* apples);这样一来,在f1中是无法知道数组的大小的,开发者必须提前知道数组大小。C++中定义了数组的引用(例如,int (&a)[2]),可以有效的防止数组退化。 n也就是,数组作为函数参数
当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;
多维数组json_encode之后产生对象而不是数组问题
json_encode函数可以对PHP的数组进行编码,返回值是json格式的字符串。对于多维数组进行json_encode,我一直以为是返回数组形式(形如{{obj1}, {obj2}, {obj3}}),但今天接口返回给客户端发现变成了对象而不是数组(形如[{....},{.....},{.....}]),不方便客户端操作,检查代码才发现,我之前一个unset操作把多维数组的第一个单元给删掉了,
Python--元组只有一个元素时类型不是元组
元组只有一个元素时变量类型不是元组, 是元素的类型nn&amp;gt;&amp;gt;&amp;gt; tupe1 = (1) n&amp;gt;&amp;gt;&amp;gt; type(tupe1) n&amp;lt;class 'int'&amp;gt;nn实际来说,元组放一个元素是不合适的,只有一个元素还不如直接使用变量,如果确实需要只有一个元素的元组,应该在元素后面加一个逗号nnnn&amp;gt;&amp;gt;&amp;gt; tupe1 = (1,) n&amp;gt;&amp;g...
判断一个变量是数组还是对象
javascript中如何准确判断一个变量是什么,面试中这是考一个人基本功扎不扎实必定会问的一个问题。如果你还不是很清楚,相信这篇文章会对你有所帮助。一,判断方法        1.typeof                我们能够使用typeof判断变量的身份,判断字符串得到string,数字和NaN得到number,函数会得到function等,但是判断数组,对象和null时都会得到obje...
JAVA判断一个Object对象是否为Array类型
JAVA判断一个Object对象是否为Array类型n使用getClass()getClass()可以获得对象的类型,根据获得的对象类型,判断是否为Array数组/**n * 对象是否为数组对象n *n * @param obj 对象n * @return 是否为数组对象,如果为{@code null} 返回falsen */n public static boolean is
json解析时自动判断是object还是array
参考: njsonObject.getString()解析任意字段均可强转为string njson解析时自动判断是object还是array解析json时遇到的问题,返回的json内容中可能为jsonArray,也可能是jsonObject,当只有一个信息时是jsonObject,有多个信息时是jsonArray,如果去修改json的返回格式有些不现实。通过字符判断的话又很麻烦。 n{“scm”:
判断字符串是JSONObject还是JSONArray
使用 JSONTokener。rn JSONTokener.nextValue()会给出一个对象,然后可以动态的转换为适当的类型。rnObject json = new JSONTokener(jsonResponse).nextValue();rnif(json instanceof JSONObject){rn JSONObject jsonObject = (JSONObject)js...
php中,访问数组元素的方法
访问非数字索引的关联数组
PHP------数组和对象相互转化,stdClass Object转array
数组转JSONrnPHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。rnJSON转数组rnPHP json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。rnrn $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e'
php遍历数组问题
一、遍历数组的三种方式(1)for循环:只能遍历索引数组$arr=array('a','b','c');n$size=count($arr);nfor ($i=0;$i<$size;$i++){n echo $arr[$i];n}(2)foreach循环:可以遍历索引数组和关联数组$arr=array(n 'one'=>1,n 'two'=>2,n 'three'=>3n);
php数组运用,用本身的value做key
先说下数组用数组里面的数据做key的用处,当两张表的关联关系为一对一的时候,你可以不用join连接,分别取出两张表的数据,经过处理依旧可以得到你想要的数据  n$arrb=array(array(a1,b1,c1,d1),array(a2,b2,c2,d2),array(a3,b3,c3,d3));n   $arrbchangge=array();n   //用数组本身的值,来做key
javascript中如何把类型为object的变量,变成类型为array的变量
1、object无法直接转换为array,两个是不同的类型和数据结构。rnrn2、object中的结构是一个属性=值的结构模式,而array是数字索引=值的结构模式rnrn3、如果确实根据一定的业务逻辑能转换,则需要循环rnrnvar obj={"name":"hello","age":"111"};n var tmp=[];n for(var key in obj){n
[仅供个人参考系列]php中array与对象的区别
完整的实现可以看这篇文章:PHP数组/Hash表的实现/操作、PHP变量内核实现、PHP常量内核实现这里截图说明一下zval结构体相关的图:
php 数组将某个字段设置为key
n/**n * @param $arrn * @param $key_namen * @return arrayn * 将数据库中查出的列表以指定的 id 作为数组的键名n */nfunction convert_arr_key($arr, $key_name)n{n $arr2 = array();n foreach ($arr as $key =&amp;gt; $val) {n ...
php对象(object) 与 数组(array) 的区别以及转换
/**n * 数组 转 对象n *n * @param array $arr 数组n * @return objectn */nfunction array_to_object($arr) {n if (gettype($arr) != 'array') {n return;n }n foreach ($arr as $k =&amp;amp;amp;gt; $v) {n i...
定义一个Object类型的数组,初始容量为10,当添加到第十个元素的时候,数组的长度扩展为原来的两倍
欢迎互相学习、指教
【DAY.1】PHP如何得到数组最后元素的key?
1.array_keys(end($arr))nnn $array = array( 'one'=>1, 'two'=>2, 'three'=>3, 'four'=>4, ); $arr = array_keys($array); var_dump(end($arr));nnn2.array_pop(end($arr))nnnnn $array = arra
Array 对象 filter() 方法过滤元素
目录nnArray filter() 方法nn编码示例nnArray filter() 方法nn filter() 方法创建一个新的数组,新数组中的元素是通过检查数组中符合条件的所有元素。nn filter() 不会对空数组进行检测,也不会改变原始数组,而是返回一个新的数组。nn 注意与《JavaScript Array map() 方法》的区别,map 与 filte...
thinkphp中使用collection->toArray()将数据转换成标准的数组类型
 nnnArrayn(n [0] =&amp;gt; app\common\model\GoodsSku Objectn (n [connection:protected] =&amp;gt; Arrayn (n )nn [query:protected] =&amp;gt; n ...
小程序普通选择器的rank-key的值必须带单引号
picker是从底部弹起的滚动选择器,现支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器。今天在学习的时候 ,做普通选择器的时候在rank-key这个属性上面遇到了问题,官方文档上面的介绍:当 range 是一个 Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容官...
白鹭在数组里删除一个元素
分享一下白鹭关于数组的添加和删除的一种方法 n
Object-c-数组的使用
一.数组:rnrn1.数组初始化:rnrna.NSArray *array = [[NSArray alloc] init];rnrnb.NSArray *array = [[NSArray array];rnrn rnrn2.初始化一个可以数组并同时添加元素:rnrnNSArray *array = @[@“”,@“”,@“”];rnrn rnrn3.取出数组中得元素:rnrn(数组里面存得是神
ArrayList类的方法里面返回的是Object,为什么它还能处理任何类?
看 HeadFirst Java 一书中,ArrayList 类的源码部分,发现他的很多方法的返回值是E,public E get(int index) {n rangeCheck(index); return elementData(index);n }但是你把他赋值给的肯定是你自己写的类,ArrayList<Animal> wolflist = new Arra
typeof和instanceof的区别以及如何判断一个数组
首先要知道js的数据类型有六种:rn  number,String,null(为空),undefined(未知的),boolean,object(Array属于object)rntypeof和instanceof都可以用来判断类型 区别如下:rn1.typeof:rn  typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,object,undefined
php 利用in_array比较数组里面相同值并拼接数组
$right = array(1) {n  [0] =&amp;gt; string(18) &quot;贷后管理中心&quot;n}$name_ok的值nstring(12) &quot;系统设置&quot;nstring(12) &quot;员工管理&quot;nstring(18) &quot;贷后管理中心&quot;nstring(12) &quot;业务管理&quot;nn最终结果{ [&quot;daihou&quot;]=&amp;gt; array(1) { [&quot;name&quot
Python:为什么只有一个元素的tuple要加逗号?
    这个问题对于刚接触Python的朋友来说,可能有点莫名其妙。    首先看一下Python中的元祖:('hello','python')。    但是,括号( )既可以表示tuple,又可以表示数学公式中的小括号。所以,如果元组只有1个元素,就必须加一个逗号,防止被当作括号运算。栗子:# 此时()是数学公式中的小括号。&amp;gt;&amp;gt;&amp;gt; tup1 = (&quot;all&quot;)&amp;gt;&amp;gt;&amp;...
判断数组中的元素是否连续
现有一个整数数组,其元素是0-65535之间的任意数字。一直相同数字不会重复出现,而0可以重复出现,且0可以通配任意一个数字。设计一个算法判断该数组中的元素是否连续。nn如果一个数组包含n个元素,并且该数组中元素是连续的,那么它一定具有“数组中最大值元素与最小值元素之差为n-1”的性质。如果这些元素中包含0这样的通配数字,并且保证数组中的元素是连续的,那么数组中的非零最大值与非零最小值之差不能超过...
PHP数组超简单增加元素
使用这个方式,可以快速的对list数组增加元素neg:n$list=array();n$list[]=xxx;n$list[]=xxxnnn
php 获取数组第一个元素 以及最后一个元素 && 最后一个元素的键名
1.rnrncurrent() 函数返回数组中的当前元素的值。rnrn每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组中的第一个元素。rnrn rnrnend() - 将内部指针指向数组中的最后一个元素,并输出rnnext() - 将内部指针指向数组中的下一个元素,并输出rnprev() - 将内部指针指向数组中的上一个元素,并输出rnreset() - 将内部指针指向数组中的
PHP各进程,请求与内存之间的关系
n php静态方法是什么时候开始占用内存呢?nn 当你把这个类require或include进去的时候n n n 不同php进程会共用静态方法吗?nn 首先,进程是系统进行资源分配和调度的基本单位,所以执行每个php脚本的php-fpm进程所使用的内存是互相隔离的n 其次,php脚本的生命周期是在脚本执行完毕结束,脚本所占用的内存一般会被回收n 因此,不同php进程会一般情况下不会共用静态方法...
JS如何区分Object与Aarry的六种方法
一、经常遇见的问题:nJS中判断一个对象的类型时,通常使用typeof,这时候问题就来了,因为typeof()辨别数组的时候返回的是object,所以JSn中判断一个对象是不是数组需要一些特殊的处理方式,下面将介绍个人总结的五种处理方法。nnn二、开门见山n开发中要判断一个对象是不是数组,推荐使用下面这个函数:nfunction isArray(obj){n if(Array.
axios请求体的数组变成对象了
我在控制台打印时是nnnn请求代码nnaxios发请求的代码nn神奇nn
php 实战之array_merge函数特性-其中一个参数为null
最近做项目时,需要合并两个从数据库中读取的数组,于是想到了用php中的array_merge函数,最后结果总是为null,通过dump,发现这是由于其中的一个数组是null造成的。演示如下:rnrn$arr1 =null;rn$arr2 = array('tom','linken');rn$arr3 = array_merge($arr1,$arr2);rnvar_dump($arr3);rn运行
当表单中中只有一个文本框类型的的input
如果表单中含有一个单行文本输入域,那么无论含有多少其他类型的表单组件,那么在该输入域中点击Enter时,表单会自动提交。n并且在文本框中添加的keyup事件在回车事件发生时并不会被触发。n下面有两种解决方法,n1、在文中加入style="display:none"的type 为 textn 的 inputn2、如果不想添加元素,则把keyup事件改为keypress事件。
php中array转为json时的对象和数组的对应关系
php中数组转化为json时,总会感觉层级不是那么清晰,但其实只是json中自动处理了, n在php中数组是一定有键值对来进行表示的,这种关系在php中是一种绝对的对应关系,但在json中却不总是, n{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数;[ ]中括号,表示一个数组,也可以理解为一个数组对象;1、php一维数组//php一维数组 字母数字下标混合 narray
PHP 阵列(数组)合并、增加元素、插入指定位置
1.合并 note: call by value.n&amp;lt;?phpn$array1 = array(&quot;color&quot; =&amp;gt; &quot;red&quot;, 2, 4);n$array2 = array(&quot;a&quot;, &quot;b&quot;, &quot;color&quot; =&amp;gt; &quot;green&quot;, &quot;shape&quot; =&amp;gt; &quot;trapezoid&quot;, 4);
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习当产品经理 nlp课程是不是骗人的