4

print_r()以下の最後の 2 つの呼び出しが機能せず、次のエラーがスローされる理由を理解しようとしていますUndefined property: stdClass::$0。PHP ドキュメントによると、次の演算子を使用してオブジェクトの数値プロパティにアクセスできるはずです$object->{'x'}( x はアクセスしたい数値インデックスです)。

ありがとう。

$array = (object)array( 
    0 => 'test1',
    1 => 'test2',
    2 => 'test3',
    'test' => (object)array(
        0 => 'hi1',
        1 => 'hi2',
        2 => 'hi3'
    )
);

print_r( $array );

print_r( $array->test );

print_r( $array->test->{'0'} );

print_r( $array->{'0'} );

die();
4

3 に答える 3

3

これはPHPの破損です。オブジェクトプロパティにアクセスするための中括弧構文は、すべての数字のキーでは機能しません

于 2013-03-08T22:21:39.020 に答える
1

配列をオブジェクトに型キャストすると、すべて数字のキーが整数プロパティに変換されます。整数プロパティにはアクセスできません。

$array = array(0 => 'a', 1.5 => 'b', '2' => 'c');

var_dump((object) $array);

// object(stdClass)#1 (3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }

ただし、中括弧表記を使用してすべて数値のプロパティを設定すると、それらは文字列として格納されます。アクセスできます。

$array = (object) array();

$array->{0}   = 'a';

$array->{1.5} = 'b';

$array->{'2'} = 'c';

var_dump($array);

// object(stdClass)#1 (3) { ["0"]=> string(1) "a" ["1.5"]=> string(1) "b" ["2"]=> string(1) "c" }

したがって、あなたが抱えている問題。

于 2013-03-08T22:29:23.443 に答える
-2

これは仕事です:

 $array = (object)array( 
    a => 'test1',
    b => 'test2',
    c => 'test3',
    'test' => (object)array(
        a => 'hi1',
        b => 'hi2',
        c => 'hi3'
    )
);

print_r( $array );

print_r( $array->test );

print_r( $array->test->a);

print_r( $array->b );

die();
于 2013-03-08T22:06:57.323 に答える