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类型的对象作为数组
答案 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中的另一个错误。