2010-10-03 15 views
9

Objetivo: recuperar un elemento de datos desde un objeto PHP por número.Devolver objeto PHP por número de índice (no nombre)

Este es el print_r ($ data) del objeto:

stdClass Object 
(
    [0] => stdClass Object 
     (
      [TheKey] => 1456 
      [ThingName] => Malibu 
      [ThingID] => 7037 
      [MemberOf] => California 
      [ListID] => 7035 
      [UserID] => 157 
      [UserName] => John Doe 
     ) 
) 

no puedo encontrar la manera de tirar de un valor fuera de él. Este es solo un registro de un objeto de múltiples registros que debe ser por id en lugar de por nombre.

Estos son algunos intentos fallidos para ilustrar lo que el objetivo es:

echo $data -> 0 -> UserName; 
echo $data[0] -> UserName; 

Respuesta

27

Normalmente, los nombres de las variables PHP no pueden comenzar con un dígito. No puede acceder al $data como una matriz, ya que stdClass no implementa ArrayAccess; es solo una clase base normal.

Sin embargo, en casos como éste puede intentar acceder al atributo de objeto por su nombre numérico de este modo:

echo $data->{'0'}->UserName; 

La única razón que se me ocurre por qué la respuesta de Spudley causaría un error es porque eres ejecutando PHP 4, que no admite el uso de foreach para iterar objetos.

+0

¡SÍ! Gracias. –

+1

¿Estás seguro de que funciona? En PHP 5.3, produce 'Propiedad indefinida: stdClass :: $ 0', que es lo que siempre ha sido mi experiencia. – Matthew

+0

@konforce: Creo que mi sugerencia funciona en PHP 4, que sería lo que supongo que se está ejecutando OP, ya que la respuesta de Spudley no funciona. – BoltClock

3

¿Has probado un bucle foreach()? Eso debería darle todos los elementos accesibles, y las claves que devuelve pueden darle una mejor pista sobre cómo acceder a ellas directamente.

+0

Fatal error: No se puede utilizar el objeto del tipo stdClass como un array –

+0

qué versión de PHP está usando?A partir de PHP5, debería poder usar 'foreach' en un objeto. (si todavía está utilizando PHP4, debe actualizar ya que ha estado al final de su vida útil durante más de dos años) – Spudley

+0

+1, ya que esto habría funcionado en las versiones compatibles de PHP de todos modos. Definitivamente parece un caso de PHP 4 aquí. – BoltClock

0

probar esto:

echo $data[0]['UserName']; 

Según el manual, los objetos no están destinados a ser utilizados de esa manera. Los comentarios on this page proporcionan un medio si es imprescindible para usted. También puede simplemente confiar en las matrices si solo está utilizando el objeto para propiedades (y no comportamientos).

+0

Fatal error: No se puede utilizar el objeto del tipo stdClass como matriz en archivo.php en la línea 44

+0

He actualizado mi respuesta. En resumen, no creo que sea posible de forma inmediata, pero puede implementarse. – pixeline

7

sugerencia de BoltClock de usar "$ data -> { '0'} -> Nombre de usuario" aparentemente ya no funciona con PHP 5.

que tenía el mismo problema y me encontré con que la corriente() trabajará para conseguir ese elemento de clase numerada como esto ...

echo current($data)->UserName; 

O si eso no funciona (en función del objeto) puede que tenga que hacer otra corriente() llamar así:

echo current(current($data))->UserName; 
4

este funciona para PHP5 +

echo $data[0]->UserName; 

o

foreach ($data as $data){ 
    echo $data->UserName; 
    } 

o según lo sugerido por @orrd

current($data)->UserName works great too. 
+0

Estoy pensando por qué esta respuesta no obtuvo verificación verde –

Cuestiones relacionadas