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

对象名称 image_header 是可变的,所以它可以是任何字符串。我可以在不知道它是什么的情况下访问这个字符串吗?

@Jon 他的回答让我很满意。

对于其他想要以这种方式使用变量对象名的人:要使用变量名访问此对象,我必须使用大括号:

$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 的反射类,或者更简单地使用get_object_vars()

get_object_vars() 可能是您在这里寻找的 - 它“返回范围内指定对象的已定义对象可访问非静态属性的关联数组。如果尚未为属性分配值,它将返回空值。” 因此,您将获得关联数组中返回的属性名称及其值。

或者,您可以使用一些 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(),则可以将 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 回答