Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php数组还是非数组?_Php_Arrays - Fatal编程技术网

php数组还是非数组?

php数组还是非数组?,php,arrays,Php,Arrays,我不明白。。。我正在做一些事情,当我打印\r$var时;它告诉我我有一个数组,所以当我有一个数组时,我自然认为我有一个数组 ifis_数组$xml->searchResult->item 它返回false 我将此数组与foreach一起使用;在文档中,它说foreach除了使用数组之外不会使用其他任何东西,所以假设这是我正在使用的数组 另外,如果我试图通过 echo$xml->searchResult->item[3]; 我将得到数组的第4个元素,如果变量是数组,那么isu数组返回true,

我不明白。。。我正在做一些事情,当我打印\r$var时;它告诉我我有一个数组,所以当我有一个数组时,我自然认为我有一个数组

ifis_数组$xml->searchResult->item

它返回false

我将此数组与foreach一起使用;在文档中,它说foreach除了使用数组之外不会使用其他任何东西,所以假设这是我正在使用的数组

另外,如果我试图通过 echo$xml->searchResult->item[3];
我将得到数组的第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)都不能使用它。