2013-01-23 160 views
2
<? 
stdClass Object 
(
    [image_header] => Array 
     (
      [0] => stdClass Object 
       (
        [img] => /headers/header.jpg 
       ) 
     ) 
) 
?> 

對象名稱image_header是可變的,所以它可以是任何字符串。我可以訪問這個字符串而不知道它是什麼嗎?PHP JSON獲取對象的名稱

@Jon他的回答讓我很滿意。

對於其他人誰想要使用變量的ObjectName是這樣的: 進入電影與VARIABLENAME我不得不使用大括號這個對象:

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

這是對象的唯一屬性嗎?如果沒有,你想要哪個名字? – Jon

+0

這是唯一的一個。我試圖避免一個foreach循環;-) – Klaaz

+0

我添加了一個答案,但恐怕它也相當於'foreach'內部:) – Jon

回答

7

你可以用get_object_vars方便地做到這一點:

$propertyName = key(get_object_vars($object)); 
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]); 
+0

謝謝,去Jon的,它是最乾淨的解決方案:) – Klaaz

2

如果你不知道什麼屬性的名稱,你可以使用PHP的Reflection classes,或者更簡單地使用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' 
} 
+0

用於ReflectionClass方法。 – Klaaz