2012-03-07 15 views
24

Estoy tratando de obtener una propiedad de datos JSON decodificados en un objeto PHP. Es solo una solicitud de la API de datos de YouTube que devuelve un objeto de video que tiene un objeto de contenido como los gusanos;Obtiene una propiedad de objeto PHP que es un número

[content] => stdClass Object 
       (
        [5] => https://www.youtube.com/v/r4ihwfQipfo?version=3&f=videos&app=youtube_gdata 
        [1] => rtsp://v4.cache7.c.youtube.com/CiILENy73wIaGQn6pSL0waGIrxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp 
        [6] => rtsp://v6.cache3.c.youtube.com/CiILENy73wIaGQn6pSL0waGIrxMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp 
       ) 

Haciendo

$object->content->5 

Lanza "T_DNUMBER inesperada" - que tiene mucho sentido. ¿Pero cómo obtengo el valor de una propiedad que es un número?

Estoy seguro de que debería saber esto. Gracias por adelantado.

+3

Sin duda, uno de los matices más molestos de PHP. –

+1

Posible duplicado de [¿Cómo acceder a las propiedades del objeto con nombres como enteros?] (Http://stackoverflow.com/questions/10333016/how-to-access-object-properties-with-names-like-integers) – nawfal

+0

[This explícalo perfectamente] (https://stackoverflow.com/q/10333016/6521116) –

Respuesta

47

esto debería funcionar:

$object->content->{'5'}

+1

Eso no fue así. ¡Gracias! –

+5

No funcionó. Capturó una propiedad 'Indefinida: stdClass :: $ 5'. Uso de la versión 5.5.7 de PHP – Geo

+5

Este flujo de trabajo NO FUNCIONA si la variable era una matriz que se ha lanzado a un objeto. Puede encontrar una explicación detallada y ejemplos aquí: http://stackoverflow.com/a/10333200/58795 –

17

Otra posibilidad es usar el segundo parámetro a json_decode:

$obj = json_decode(str, true); 

obtiene una matriz en lugar de un objeto PHP, que luego se puede índice como de costumbre:

$obj['content'][5] 
+1

Eso funcionaría también, gracias. –

+0

mucho más limpio mi humilde opinión, gracias por la pista =) – Can

2

Otro enfoque es cas ting el objeto a la matriz.

$array = (array) $object; 
$array['content'][5]; 
+1

Esto es incorrecto. Solo has lanzado el objeto '$ object' a una matriz. La propiedad '$ content' sigue siendo un objeto. También necesitaría agregar esto: '$ array ['content'] = (array) $ array ['content'];'. Es por eso que la solución de codificación/decodificación JSON es más simple. Convierte todos los objetos secundarios también. –

+0

Es cierto, solo funciona con matrices unidimensionales –

1

JSON codifica, y luego decodifica tu objeto pasando verdadero como el segundo parámetro en la función de decodificación. Esto devolverá una matriz asociativa.

$array = json_decode(json_encode($object), true); 

Ahora usted puede utilizar su nueva matriz

echo $array['content']['5']; 

Usando $object->content->{'5'} se no trabajo si el objeto fue creado por fundición de una matriz a un objeto.

Una descripción más detallada se puede encontrar aquí: https://stackoverflow.com/a/10333200/58795

Cuestiones relacionadas