Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Recorrer stdClass

Estas en el tema de Recorrer stdClass en el foro de PHP en Foros del Web. Bien voy a ser directo he visto los ejemplos y preguntas que han hecho en el foro al respecto, a todos le funciona pero en ...
  #1 (permalink)  
Antiguo 12/06/2013, 23:22
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 11 años, 6 meses
Puntos: 0
Recorrer stdClass

Bien voy a ser directo he visto los ejemplos y preguntas que han hecho en el foro al respecto, a todos le funciona pero en mi caso no. si imprimo con un print_r el objeto me sale lo siguiente:

Array ( [0] => stdClass Object ( [trends] => Array ( [0] => stdClass Object ( [name] => #WhatMakesMeMad [url] => http://twitter.com/search?q=%23WhatMakesMeMad [promoted_content] => [query] => %23WhatMakesMeMad [events] => ) [1] => stdClass Object ( [name] => #MeGustasTú [url] => http://twitter.com/search?q=%23MeGustasT%C3%BA [promoted_content] => [query] => %23MeGustasT%C3%BA [events] => ) [2] => stdClass Object ( [name] => #3OT [url] => http://twitter.com/search?q=%233OT [promoted_content] => [query] => %233OT [events] => ) [3] => stdClass Object ( [name] => #NuncaFaltaElAmigoQue [url] => http://twitter.com/search?q=%23NuncaFaltaElAmigoQue [promoted_content] => [query] => %23NuncaFaltaElAmigoQue [events] => ) [4] => stdClass Object ( [name] => #SintomasDeUnWeyCursi [url] => http://twitter.com/search?q=%23SintomasDeUnWeyCursi [promoted_content] => [query] => %23SintomasDeUnWeyCursi [events] => ) [5] => stdClass Object ( [name] => Johnny Tsunami [url] => http://twitter.com/search?q=%22Johnny+Tsunami%22 [promoted_content] => [query] => %22Johnny+Tsunami%22 [events] => ) [6] => stdClass Object ( [name] => F-bomb [url] => http://twitter.com/search?q=F-bomb [promoted_content] => [query] => F-bomb [events] => ) [7] => stdClass Object ( [name] => Chelsea Dagger [url] => http://twitter.com/search?q=%22Chelsea+Dagger%22 [promoted_content] => [query] => %22Chelsea+Dagger%22 [events] => ) [8] => stdClass Object ( [name] => Boston [url] => http://twitter.com/search?q=Boston [promoted_content] => [query] => Boston [events] => ) [9] => stdClass Object ( [name] => Game 1 [url] => http://twitter.com/search?q=%22Game+1%22 [promoted_content] => [query] => %22Game+1%22 [events] => ) ) [as_of] => 2013-06-13T05:16:10Z [created_at] => 2013-06-13T05:14:52Z [locations] => Array ( [0] => stdClass Object ( [name] => Globales [woeid] => 1 ) ) ) )


No encuentro la manera de obtener name de todo los trends, he tratado usar foreach, con los ejemplos aqui vistos me corren sin novedad pero en este caso el arreglo de objetos me parece distinto sobre todo al principio donde dice de un vez "Array ( [0] => stdClass Object ( [trends] => Array..." creo que alli no me cuadra ya que viendo los ejemplos deberia empezar donde dice [trends] => Array...

Bueno solo lo digo, si alguien sabe como extraer name de alli que me ayude

gracias!
  #2 (permalink)  
Antiguo 12/06/2013, 23:24
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Recorrer stdClass

Debes obtener las propiedades primero por ejemplo con get_object_vars()

<?php
$persona = new stdClass();

$persona->nombre = 'Pepe';
$persona->profesion='ninguna';
$persona->salario='poco';

$vars = get_object_vars($persona);

foreach ($vars as $prop => $var){
echo "Propiedad $prop := $var <br/>";
}
__________________
Salu2!

Última edición por Italico76; 12/06/2013 a las 23:31
  #3 (permalink)  
Antiguo 13/06/2013, 11:12
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Recorrer stdClass

Gracias hermano pero no me funciona
  #4 (permalink)  
Antiguo 13/06/2013, 11:51
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Recorrer stdClass

En tu caso creeria $trends tiene la instancia de stdClass

foreach (get_object_vars($trends) as $prop => $var){
echo "Propiedad $prop := $var <br/>";
}

Que es lo que no te funciona ?
__________________
Salu2!
  #5 (permalink)  
Antiguo 13/06/2013, 12:10
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Recorrer stdClass

Bien Italico profundizandoun poco, todo eso que mostre esta en una variable llamada $content, al darle print_r($content); obtengo esos valores...es una informacion que obtengo desde una url. Le aplique un gettype(); para ver que tipo de variable es $content y me dice que es Array, pues entonces no es object como pensaba, sin embargo parece un stdClass... no tengo niidea de como acceder a un valor espcifico. Se me ocurre tratar de convertirlo a objeto y luego trabajarlo como me dices, claro si hay alguna forma de hacerlo? o trabajarlo como array me parece un despelote

gracias por ayudarme
  #6 (permalink)  
Antiguo 13/06/2013, 12:34
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Recorrer stdClass

Ya vi el problema....... estaba mirando mal

tu tienes un ARRAY DE OBJETOS StdClass ... la solucion es iterar primero el array...obtener los objetos y ahi listar propieades con valores:

Código PHP:
foreach ($content as $obj){

    foreach (
get_object_vars($obj) as $prop => $var){
         echo 
"Propiedad $prop := $var <br/>";
    }


__________________
Salu2!
  #7 (permalink)  
Antiguo 13/06/2013, 13:02
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Recorrer stdClass

Al parecer estamos cerca, parece que debemos acceder a un nivel mas fijate lo que me sale en pantalla:


( ! ) Notice: Array to string conversion in C:\wamp\www\globalstreaming.php on line 20
Call Stack
# Time Memory Function Location
1 0.0018 142800 {main}( ) ..\globalstreaming.php:0

Propiedad trends := Array
Propiedad as_of := 2013-06-13T18:57:49Z
Propiedad created_at := 2013-06-13T18:52:29Z

( ! ) Notice: Array to string conversion in C:\wamp\www\globalstreaming.php on line 20
Call Stack
# Time Memory Function Location
1 0.0018 142800 {main}( ) ..\globalstreaming.php:0

Propiedad locations := Array

esas propiedades revisando estan a un nivel superior, quiero obtener es la propiedad name de trends, que son 10 en total
  #8 (permalink)  
Antiguo 13/06/2013, 13:41
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Recorrer stdClass

Es que algunos campos son arrays ... pero es lo de menos, asi lo puedes ver:

Código PHP:
<?php

foreach ($content as $obj){

    foreach (
get_object_vars($obj) as $prop => $var){           
         if (
is_array($var)) 
             
var_dump ($var);
         else
            echo 
"Propiedad $prop := $var <br/>";    }

}
Logicamente poder ver bien el contenido es el primer paso.
__________________
Salu2!
  #9 (permalink)  
Antiguo 13/06/2013, 14:40
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Recorrer stdClass

bien habia llegado alli con otro codigo el tuyo esta mejor, como hago para obtener un valor especifico? por ejemplo el valor de 'name' del tercer objeto? eso es lo que me cuesta precisar
  #10 (permalink)  
Antiguo 13/06/2013, 14:42
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Recorrer stdClass

de verdad disculpa la molestia pero es que mi pagina funcionaba bien hasta que twitter decidio actualizar sus API y convirtieron todo ese formato en arreglo de objetos y estoy actualizando todo pero vaya que esto me tiene loco, gracias por la ayuda
  #11 (permalink)  
Antiguo 13/06/2013, 15:44
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Recorrer stdClass

Listo hermano ya lo resolvi, recorri el array con un nuevo foreach, quito el var_dump y coloco un if preguntando si el valor de $prop='name' y si es asi coloco el foreach para recorrer todos los objetos y voy imprimiendo solo ese valor.

gracia por tu ayuda me salvaste el dia

Etiquetas: stdclass
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:12.