<?
stdClass Object
(
[image_header] => Array
(
[0] => stdClass Object
(
[img] => /headers/header.jpg
)
)
)
?>
对象名称image_header是可变的,因此它可以是任何字符串。我可以在不知道它的情况下访问此字符串吗?
@Jon他的回答让我感到满意。
对于想要以这种方式使用变量对象名的其他人: 要使用variablename访问此对象,我必须使用大括号:
$key = key(get_object_vars($_json));
$_json->{$key}[0]->img;
答案 0 :(得分:7)
您可以使用get_object_vars
方便地执行此操作:
$propertyName = key(get_object_vars($object));
答案 1 :(得分:2)
如果您不知道该属性的名称,可以使用PHP Reflection classes,或者更简单地使用get_object_vars()。
get_object_vars()可能就是你在这里寻找的东西 - 它&#34;返回范围内指定对象的已定义对象可访问非静态属性的关联数组。如果尚未为属性分配值,则将返回NULL值。&#34;因此,您将获得在关联数组中返回的属性名称及其值。
或者,您可以使用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'
}
答案 2 :(得分: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] );