为什么我无法通过索引$obj->property[0]
访问数组,但可以遍历数组(每个只有一个值),然后获取值。
foreach($obj->property as $inner_obj) { foreach($inner_obj->property as $inner_inner_obj) echo $inner_inner_obj->property; }
如果我按索引访问数组,我会得到Undefined offset: 0
编辑:var_dump的输出
array(1) { [0]=> object(FooClass)#141 { // yadda yadda } }
答案 0 :(得分:0)
$obj
不是其stdClass Object
和
因为$obj->property[0]
会显示Undefined offset: 0
尝试使用它来获取property
的第一个值
$obj->property->property;
答案 1 :(得分:0)
因为你在foreach中循环遍历数组的属性。使用[0],您明确尝试将其作为数组访问。你可以让你的对象扩展ArrayObject并让php访问你的对象作为你想要的数组。
能够将对象用作数组的接口:
http://www.php.net/manual/en/class.arrayaccess.php
http://www.php.net/manual/en/class.countable.php
http://www.php.net/manual/en/class.iteratoraggregate.php
您可以扩展的对象本身:
http://www.php.net/manual/en/class.arrayobject.php
答案 2 :(得分:0)
如果您按implements
Countable, Iterator
进行课程,则可以创建一个与foreach
配合使用的对象,但它不是数组
答案 3 :(得分:0)
$obj->property
可以是没有键0
的数组。
数组中的键可能不是数字。所以你的数组可能是一个非常规的关联数组。
如果你想要数字索引,试试这个:
$numArray = array_values($obj->property);
var_dump($numArray);
如果要访问数组的第一个值,请使用:
$first = reset($obj->property);
如果您的变量是array
,则无效。