无法访问对象中的数组

时间:2012-06-23 21:35:03

标签: php

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类型的对象作为数组

3 个答案:

答案 0 :(得分:2)

它说你的var_dump中$img->files不是数组,它是类stdClass的对象。

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

$img->files->{'60'};

答案 1 :(得分: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]);

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

Fiddle可以玩。

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

答案 2 :(得分: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中的另一个错误。