php数组还是非数组?
我不明白。。。我正在做一些事情,当我打印\r$var时;它告诉我我有一个数组,所以当我有一个数组时,我自然认为我有一个数组 ifis_数组$xml->searchResult->item 它返回false 我将此数组与foreach一起使用;在文档中,它说foreach除了使用数组之外不会使用其他任何东西,所以假设这是我正在使用的数组 另外,如果我试图通过 echo$xml->searchResult->item[3];php数组还是非数组?,php,arrays,Php,Arrays,我不明白。。。我正在做一些事情,当我打印\r$var时;它告诉我我有一个数组,所以当我有一个数组时,我自然认为我有一个数组 ifis_数组$xml->searchResult->item 它返回false 我将此数组与foreach一起使用;在文档中,它说foreach除了使用数组之外不会使用其他任何东西,所以假设这是我正在使用的数组 另外,如果我试图通过 echo$xml->searchResult->item[3]; 我将得到数组的第4个元素,如果变量是数组,那么isu数组返回true,
我将得到数组的第4个元素,如果变量是数组,那么isu数组返回true,否则返回false。在您的例子中,$xml->searchResult->item似乎不是数组。输出用于什么
var_dump($xml->searchResult->item)
??另一个提示:您可以通过gettype确定变量的类型。print\r还将打印对象,就像它们是数组一样。is\u array仅对真正的php数组返回true。使用ArrayAccess类可以创建一个伪数组。也就是说,您可以使用正常的数组语义,如项[3],但它不是真正的数组。我怀疑你的$item是一个对象。所以使用
if($x instanceof ArrayAccess || is_array($x))
相反。手册确实提到foreach也可以处理对象,并且它将迭代属性 在您的情况下,情况略有不同,因为我猜您使用的是SimpleXML,这是另一种特殊情况。SimpleXMLElement有自己的迭代器,我假设它是硬编码的,因为它似乎没有实现任何的迭代器接口 长话短说,有些对象可以用作数组,但它们不是数组 另外,如果我试图通过echo$xml->searchResult->item[3]访问它;我将获得数组的第四个元素
没错,第一个元素始终为0,除非您专门更改它。请仔细检查数组返回的内容。您可能有一个class或stdClass为空的对象,您无法从中获取元素。这正是发生的情况。XML节点是对象。我的理解也是。OP引用的结果可以以几种方式用作数组,但不仅will is_array不是真的,而且许多标准数组函数(如array_merge)都不能使用它。