2
<?
stdClass Object
(
    [image_header] => Array
        (
            [0] => stdClass Object
                (
                    [img] => /headers/header.jpg
                )
        )
)
?>

オブジェクト名 image_header は可変なので、任意の文字列にすることができます。この文字列が何であるかを知らなくてもアクセスできますか?

@ジョン彼の答えは私にとって満足のいくものでした。

このように変数オブジェクト名を使用したい他の人のために: 変数名でこのオブジェクトにアクセスするには、中かっこを使用する必要がありました:

$key = key(get_object_vars($_json));
$_json->{$key}[0]->img;
4

3 に答える 3

9

あなたはそれを便利に行うことができますget_object_vars

$propertyName = key(get_object_vars($object));
于 2013-01-23T16:05:29.930 に答える
2

プロパティの名前がわからない場合は、PHPのReflectionクラスを使用するか、より単純にget_object_vars()を使用できます。

get_object_vars()は、おそらくここで探しているものです。「スコープ内の指定されたオブジェクトに対して、定義されたオブジェクトにアクセス可能な非静的プロパティの連想配列を返します。プロパティに値が割り当てられていない場合は、 NULL値。」したがって、プロパティ名とその値が連想配列で返されます。

または、PHPのリフレクションマジックの一部を使用することもできますが、最終目標によっては、ここでは少しやり過ぎかもしれません。リフレクションクラスは非常に強力であり、達成しようとしていることに対してより複雑な要件がある場合は、使用する価値があるかもしれません。例として:

// let's say $obj is the object you provided in your question
// Instantiate the reflection object
$reflector = new ReflectionClass($obj); 

// Get properties of $obj, returned as an array of ReflectionProperty objects
$properties = $reflector->getProperties();
foreach ( $properties as $property ) {
  echo $property->getName(); // In your example, this would echo 'image_header'
}
于 2013-01-23T16:25:28.717 に答える
0

いくつかの可能性があります。を使用している場合はjson_decode()、2番目のパラメーターとしてtrueを渡して、データを連想配列として解析できます。

$data = json_decode($myJson, true);

print_r( $data['image_header'] );

このような変数からオブジェクトプロパティにアクセスすることもできます。

$myProperty = 'image_header';

print_r( $data->$myProperty );

「それが何であるかわからない」とは、キーがまったくわからないことを意味する場合は、私の最初の例を使用array_values()して、インデックスで値を取得するために使用できます。

$values = array_values($data);

// image_header
print_r( $values[0] );
于 2013-01-23T16:04:04.867 に答える