-1
var_dump($img->files);

object(stdClass)#17 (6) {
  ["960"]=  string(46) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-960.jpg"
  ["60"]=   string(45) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-60.jpg"
  ["100"]=  string(46) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-100.jpg"
  ["200"]=  string(46) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-200.jpg"
  ["300"]=  string(46) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-300.jpg"
  ["500"]=  string(46) "/imgs/14c99db10ee9cc28bfa7db16e961fd65-500.jpg"
}

如何使用一个索引

var_dump($img->files["60"]);

失败

致命错误:不能将 stdClass 类型的对象用作数组

4

3 回答 3

2

它在您的 var_dump 中说这$img->files不是数组,它是 class 的对象stdClass

您应该使用对象语法访问它。

$img->files->{'60'};
于 2012-06-23T21:36:41.640 回答
1

这就是我们如何获得与您获得的数据结构相似的数据结构:

$img = new stdClass();
$img->files = array(960 => "/imgs/14c99db10ee9cc28bfa7db16e961fd65-960.jpg");
$img->files = (object)$img->files;

...然后这个:

var_dump($img->files->{'960'}); // NULL

...只会打印NULL。但是这个...

$img->files = (array)$img->files;
var_dump($img->files[960]);

... 将工作。) 您需要将一个类似数组的对象(显然是由一些外部代码错误地转换为对象)回数组。然后像往常一样访问它的元素。

小提琴玩。

更新:...这里是帖子的链接,它解释了这种行为的原因,比我能做到的要好得多。)

于 2012-06-23T21:44:38.177 回答
0

PHP 5.3.10,运行这个测试:

$obj = (object)array(10 => 'foo');
$obj->{20} = 'bar';

var_dump($obj);

print($obj->{10}."\n");
print($obj->{20}."\n");

运行它我得到这个结果:

object(stdClass)#1 (2) {
  [10]=>
  string(3) "foo"
  ["20"]=>
  string(3) "bar"
}
PHP Notice:  Undefined property: stdClass::$10 in /home/lanzz/tmp/test.php on line 8

bar

因此,从数组转换的数字属性被分配给对象中不可访问的实际整数属性,而分配给对象的数字属性获得可访问的字符串属性。

我认为这只是 PHP 中的另一个错误。

于 2012-06-23T21:46:56.383 回答