2010-08-05 91 views
6

我有一個對象只有一個鍵和它的值。但我不知道訪問它的關鍵。沒有枚舉對象的情況下獲取密鑰的最有效方法是什麼?PHP:從對象中獲取一個密鑰

+0

那麼你怎麼知道你有正確的鑰匙? – NullUserException 2010-08-05 03:20:45

+0

你正在做'array_search'嗎? – 2010-08-05 03:26:06

+2

我只是一個單一的json對象轉換爲php像'{「foo」:3}',我需要同時採取,鍵名和值。 – Pablo 2010-08-05 03:29:51

回答

21

如果你只是想在所有訪問值,你不需要密鑰(實際上屬性名):

$value = current((array)$object); 

如果你真的想屬性名,試試這個:

$key = key((array)$object); 
+0

我有一個對象數組,每個對象都有一個屬性,我不知道屬性的名稱。我使用'foreach'循環遍歷數組,並且對於每個對象,我都需要鍵和值。我找到了這個解決方案,但是效率不是很低,因爲你每次將$對象轉換爲數組? (對不起,如果它太基本了,但我是一個新手。一個答案將不勝感激,因爲我不知道這是否明智或不)。 – Solace 2015-11-01 22:12:12

3
$array = array("foo" => "bar"); 

$keys = array_keys($array); 

echo $keys[0]; 

// Output: foo 

參見:http://php.net/manual/en/function.array-keys.php

+0

這真的適用於一個對象? 'stdClass :: __ set_state(array( 'tag1'=> 1, ))' – Pablo 2010-08-05 03:25:32

+0

@Michael:我的錯誤,我以爲你試圖從數組中檢索密鑰。在這種情況下,您最好將對象轉換爲數組。請參閱@ thomasrutter的示例:http://stackoverflow.com/questions/3411495/php-get-a-single-key-from-object/3411520#3411520 – gpmcadam 2010-08-05 03:27:53

+0

我最初誤導以及使用單詞「鍵」 ,這是一個數組術語... – deceze 2010-08-05 03:30:59

4

,就可以把對象數組像這樣:

$myarray = (array)$myobject; 

然後,對於只有單一值的數組,這應該取鑰匙爲那個價值。

$value = key($myarray); 

如果你願意,你可以在一行中做到這一點。當然,你也可以通過枚舉對象來實現,就像你在你的問題中提到的一樣。

要獲取價值,而不是關鍵,那麼:

$value = current($myarray);