2010-08-05 9 views
6

Tengo un objeto con una sola clave y su valor. Pero no sé la clave para acceder a ella. ¿Cuál es la forma más eficiente de obtener la clave sin enumerar el objeto?PHP: obtenga una sola clave del objeto

+0

Entonces, ¿cómo sabes que tienes la llave correcta? – NullUserException

+0

¿Está buscando hacer una 'array_search'? –

+2

Tengo un solo objeto json convertido a php como '{" foo ": 3}' y necesito tomar tanto el nombre como el valor de la clave. – Pablo

Respuesta

21

Si lo que desea es acceso el valor, que no necesita la clave (en realidad nombre de la propiedad) en absoluto:

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

Si realmente desea que el nombre de la propiedad , intente esto:

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

Tengo una matriz de objetos y los objetos tienen una propiedad cada uno, y no sé los nombres de las propiedades. Estoy iterando a través de la matriz mediante el bucle 'foreach', y para cada objeto, quiero la clave y el valor. He encontrado esta solución, pero ¿no es ineficiente porque estás lanzando el objeto $ a una matriz cada vez? (Disculpe si es demasiado básico, pero soy un principiante. Una respuesta será muy apreciada, ya que no estoy seguro de si es aconsejable usar esto o no). – Solace

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

$keys = array_keys($array); 

echo $keys[0]; 

// Output: foo 

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

+0

Esto realmente funciona para un objeto? 'stdClass :: __ set_state (array ( 'tag1' => 1, ))' – Pablo

+0

@Michael: Mi error, supuse que estabas intentando recuperar la clave de una matriz. En ese caso, querrás lanzar el objeto a una matriz lo más probable. Ver el ejemplo de @thomasrutter: http://stackoverflow.com/questions/3411495/php-get-a-single-key-from-object/3411520#3411520 – gpmcadam

+0

En un principio, me equivoqué al usar la palabra "clave" , que es un término de matriz ... – deceze

4

Puede convertir el objeto a una serie como esta:

$myarray = (array)$myobject; 

Y entonces, por una matriz que tiene un solo valor, esto debería ir a buscar la llave por ese valor.

$value = key($myarray); 

Puede hacer ambas cosas en una línea si lo desea. Por supuesto, también puedes hacerlo enumerando el objeto, como mencionaste en tu pregunta.

para obtener el valor en lugar de la clave, entonces:

$value = current($myarray); 
Cuestiones relacionadas