0

为什么我不能通过索引访问数组$obj->property[0]但可以遍历数组(每个只有一个值)然后获取值。

foreach($obj->property as $inner_obj)
{
    foreach($inner_obj->property as $inner_inner_obj)
        回声$inner_inner_obj->属性;
}

如果我按索引访问数组,我会得到Undefined offset: 0

编辑: var_dump 的输出

数组(1){
 [0]=> 对象(FooClass)#141 {
   // 雅达 雅达
  }
}
4

4 回答 4

1

如果你通过上课,implements Countable, Iterator你可以制作一个可以使用foreach但它不是数组的对象

于 2013-04-08T11:49:46.227 回答
0

$obj不是数组它的stdClass Object

因为那$obj->property[0]会告诉你Undefined offset: 0

尝试像这样使用它来获得第一个值property

$obj->property->property;
于 2013-04-08T11:47:17.563 回答
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

Imo,在没有数组接口的情况下循环对象从来都不是一个好主意,因为这意味着您正在使用公共变量。我的建议是始终使它们受到保护或私有,除非不可能(SOAP?)。您可以通过 getter 和 setter 访问它们。

于 2013-04-08T11:48:43.710 回答
0

$obj->property可以是没有 key 的数组0。数组中的键可能不是数字。因此,您的数组可能是关联数组而不是常规数组。如果你想要数字索引试试这个:

  $numArray = array_values($obj->property);
  var_dump($numArray);

如果要访问数组的第一个值,请使用:

  $first = reset($obj->property);

如果您的变量是array.

于 2013-04-08T11:50:12.703 回答