Php Can';t通过索引访问数组,但可以使用foreach进行迭代
为什么我不能通过索引Php Can';t通过索引访问数组,但可以使用foreach进行迭代,php,Php,为什么我不能通过索引$obj->property[0]访问数组,但可以遍历数组(每个数组只有一个值),然后获取值 foreach($obj->property as $inner_obj) { foreach($inner_obj->property as $inner_inner_obj) echo $inner_inner_obj->property; } $obj不是其stdClass对象的数组 因为$obj->property[0]将显示未定义的偏移量:0 尝试这
$obj->property[0]
访问数组,但可以遍历数组(每个数组只有一个值),然后获取值
foreach($obj->property as $inner_obj)
{
foreach($inner_obj->property as $inner_inner_obj)
echo $inner_inner_obj->property;
}
$obj
不是其stdClass对象的数组
因为$obj->property[0]
将显示未定义的偏移量:0
尝试这样使用它来获取属性的第一个值
$obj->property->property;
因为在foreach中循环数组的属性。使用[0]可以显式地尝试将其作为数组访问。你可以让你的对象扩展ArrayObject,让php以数组的形式访问你的对象,我想这就是你想要的
能够将对象用作数组的接口:
可以扩展的对象本身:
在我看来,在没有数组接口的对象上循环从来都不是一个好主意,因为这意味着您正在使用公共变量。我的建议是,除非另有可能(SOAP?),否则应始终将它们设置为受保护的或私有的。您可以通过getter和setter访问它们。如果您通过实现类
可计数,迭代器
可以创建一个对象,该对象与foreach
一起工作,但它不是数组属性
可以是一个数组,而不具有key0
。
数组中的键可能不是数字。因此,您的数组可能是关联数组,而不是常规数组。
如果需要数字索引,请尝试以下操作:
$numArray = array_values($obj->property);
var_dump($numArray);
如果要访问数组的第一个值,请使用:
$first = reset($obj->property);
如果你的变量是一个数组
你能在你的问题中添加:var\u dump($obj->property)
?print\r($obj->property)也许不是数组,数组对我来说是对象,不是数组?我想这是一个对象实现,但你可以通过对象属性进行迭代。检查此链接;所以,没有其他方法(当然除了foreach)来访问我需要的值?顺便说一句,我使用的是Yii框架。CModel类还实现了IteratorAggregate、ArrayAccess
$first = reset($obj->property);