2010-08-05 4 views
6

J'ai un objet avec une seule clé et sa valeur. Mais je ne connais pas la clé pour y accéder. Quel est le moyen le plus efficace d'obtenir la clé sans énumérer l'objet?PHP: obtenir une seule clé de l'objet

+0

Alors, comment savez-vous que vous avez la bonne clé? – NullUserException

+0

Cherchez-vous à faire un 'array_search'? –

+2

Je n'ai qu'un seul objet json converti en php comme '{" foo ": 3}' et j'ai besoin de prendre à la fois le nom et la valeur de la clé. – Pablo

Répondre

21

Si vous voulez juste accéder à la valeur, vous n'avez pas besoin de la clé (en fait nom de la propriété) du tout:

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

Si vous voulez vraiment le nom de propriété , essayez ceci:

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

J'ai un tableau d'objets et les objets ont une propriété chacun, et je ne connais pas les noms des propriétés. Je parcours le tableau en utilisant la boucle 'foreach', et pour chaque objet, je veux la clé ainsi que la valeur. J'ai trouvé cette solution, mais n'est-ce pas inefficace parce que vous lancez l'objet $ dans un tableau à chaque fois? (Désolé si c'est trop basique, mais je suis un newb.) Une réponse sera grandement appréciée, car je ne suis pas sûr qu'il soit judicieux de l'utiliser ou non). – Solace

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

$keys = array_keys($array); 

echo $keys[0]; 

// Output: foo 

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

+0

Cela fonctionne vraiment pour un objet? 'stdClass :: __ set_state (array ( 'tag1' => 1, ))' – Pablo

+0

@Michael: Mon erreur, j'ai supposé que vous essayiez de récupérer la clé d'un tableau. Dans ce cas, vous souhaiterez lancer l'objet dans un tableau le plus probable. Voir l'exemple de @ thomasrutter: http://stackoverflow.com/questions/3411495/php-get-a-single-key-from-object/3411520#3411520 – gpmcadam

+0

J'ai d'abord été induit en erreur par l'utilisation du mot "clé" , qui est un terme tableau ... – deceze

4

Vous pouvez lancer l'objet d'un tableau comme celui-ci:

$myarray = (array)$myobject; 

Et puis, pour un tableau qui n'a qu'une seule valeur, cela devrait aller chercher la clé pour cette valeur.

$value = key($myarray); 

Vous pouvez faire les deux en une ligne si vous le souhaitez. Bien sûr, vous pouvez aussi le faire en énumérant l'objet, comme vous l'avez mentionné dans votre question.

Pour obtenir la valeur plutôt que la clé, puis:

$value = current($myarray); 
Questions connexes