-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"
}

1 つのインデックスを使用する方法

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 に答える