Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Return y echo me dan resultados diferentes, por que?

Estas en el tema de Return y echo me dan resultados diferentes, por que? en el foro de PHP en Foros del Web. Hola como estan, soy nuevo en el foro , bueno mi duda es la siguiente: Por que en una función que tengo con un array ...
  #1 (permalink)  
Antiguo 16/06/2013, 11:46
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 1
Return y echo me dan resultados diferentes, por que?

Hola como estan, soy nuevo en el foro , bueno mi duda es la siguiente: Por que en una función que tengo con un array me devuelve todos los valores si pongo echo, pero si pongo return solo me devuelve un valor, les dejo parte del código, para ser mas claro:
Código PHP:
public function getpathlivepos_json($num) {
.
.
.
foreach(
$Rs as $Route)
    {
            
$arrayJson = array();
            
$i 0;
            foreach(
$Route->TrackerRouteList as $unit)
            {
                
$arrayJson[$i]['Unit'] = $unit->TrackerId;
                foreach(
$unit->CoordinateList as $Coordinates)
                {
                    
$arrayJson[$i]['Coordinates'][] = array($Coordinates->Latitude$Coordinates->Longitude);
                }
                
$i++;
                
                
            }
                     return 
json_encode($arrayJson);
            
    }
         


El resultado de este codigo, usando return para la devolucion de valores,es el siguiente:
[{"Unit":7,"Coordinates":[["21.115957","-86.838120"]]}];

Ahora bien si cambio el return json_encode($arrayJson); por echo:
echo json_encode($arrayJson);

Me devuelve todos los valores que realmente necesito:
[{"Unit":7,"Coordinates":[["21.115957","-86.838120"]]}][{"Unit":8,"Coordinates":[["21.110843","-86.840906"]]}][{"Unit":9,"Coordinates":[["21.110757","-86.841915"]]}]

Como puedo hacer para que mi función me devuelva todos los valores que necesito en formato Json?

Muchas gracias.
  #2 (permalink)  
Antiguo 16/06/2013, 11:55
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Return y echo me dan resultados diferentes, por que?

Cita:
Iniciado por iceberg Ver Mensaje
Hola como estan, soy nuevo en el foro , bueno mi duda es la siguiente: Por que en una función que tengo con un array me devuelve todos los valores si pongo echo, pero si pongo return solo me devuelve un valor, les dejo parte del código, para ser mas claro:
Código PHP:
public function getpathlivepos_json($num) {
.
.
.
foreach(
$Rs as $Route)
    {
            
$arrayJson = array();
            
$i 0;
            foreach(
$Route->TrackerRouteList as $unit)
            {
                
$arrayJson[$i]['Unit'] = $unit->TrackerId;
                foreach(
$unit->CoordinateList as $Coordinates)
                {
                    
$arrayJson[$i]['Coordinates'][] = array($Coordinates->Latitude$Coordinates->Longitude);
                }
                
$i++;
                
                
            }
                     return 
json_encode($arrayJson);
            
    }
         


El resultado de este codigo, usando return para la devolucion de valores,es el siguiente:
[{"Unit":7,"Coordinates":[["21.115957","-86.838120"]]}];

Ahora bien si cambio el return json_encode($arrayJson); por echo:
echo json_encode($arrayJson);

Me devuelve todos los valores que realmente necesito:
[{"Unit":7,"Coordinates":[["21.115957","-86.838120"]]}][{"Unit":8,"Coordinates":[["21.110843","-86.840906"]]}][{"Unit":9,"Coordinates":[["21.110757","-86.841915"]]}]

Como puedo hacer para que mi función me devuelva todos los valores que necesito en formato Json?

Muchas gracias.
creo que si bien veo y bien has escrito, en el primer foreach declaras las variables $arraJson y $i.

en la siguiente iteración vuelves a declarar las mismas variables, por lo que el valor se pierde.

saca esas variables del foreach (decláralas antes del foreach) y deja el return. cuando vayas a procesar la variable con que recoges el return debes procesarla con otro foreach.

antes te funcionaba con echo porque imprimias cada iteración pero con el return guardastes solo el último valor.
  #3 (permalink)  
Antiguo 17/06/2013, 07:59
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Return y echo me dan resultados diferentes, por que?

Hola gracias por tu respuesta, hice lo que me has indicado, pero aun sigo obteniendo solo un resultado, lo de volver a poner el foreach para procesar el resultado no me queda muy claro, a lo mejor por eso no puedo obtener todos los resultados, espero me expliques un poco mejor , muchas gracias.
  #4 (permalink)  
Antiguo 17/06/2013, 08:58
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Return y echo me dan resultados diferentes, por que?

Cita:
Iniciado por iceberg Ver Mensaje
Hola gracias por tu respuesta, hice lo que me has indicado, pero aun sigo obteniendo solo un resultado, lo de volver a poner el foreach para procesar el resultado no me queda muy claro, a lo mejor por eso no puedo obtener todos los resultados, espero me expliques un poco mejor , muchas gracias.
la variable con que recoges el return debes recorrerla con un foreach porque has creado un array, a eso me refiero.
  #5 (permalink)  
Antiguo 17/06/2013, 09:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Return y echo me dan resultados diferentes, por que?

El problema es que return, termina la ejecución de la función, tú la pusiste dentro del foreach() entonces por eso solo hace el ciclo una vez, tienes que dejar el return al final, y también ir agregando los resultados a otro array para que al final hagas el json_encode de todo el array generado, no solo de un ciclo.
  #6 (permalink)  
Antiguo 17/06/2013, 09:17
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Return y echo me dan resultados diferentes, por que?

Ok, gracias amigos aunque ya lo solucione, es decir mostrar todos los datos, ahora me encontre con otro problema : Uncaugth SyntaxError: Unexpected token {
Tengo la ligera sospecha que es algun problema del formato Json.
Les muestro como quedo el codigo y que genera finalmente:


Código PHP:

$arrayJson 
= array();
    
$i 0;
    foreach(
$Rs as $Route)
    {
            
            foreach(
$Route->TrackerRouteList as $unit)
            {
                
$arrayJson[$i]['Unit'] = $unit->TrackerId;
                foreach(
$unit->CoordinateList as $Coordinates)
                {
                    
$arrayJson[$i]['Coordinates'][] = array($Coordinates->Latitude$Coordinates->Longitude);
                
                }
                
$i++;
                
                
            }
            
                
            
    }
         
         
    foreach(
$arrayJson as $dataArray )
    {
            
$polylinejson.=json_encode($dataArray);

            
    } 

    
 return 
$polylinejson
Resultado esperado:
Código PHP:
{"Unit":7,"Coordinates":[["21.115957","-86.838120"]]}{"Unit":8,"Coordinates":[["21.110843","-86.840906"]]}{"Unit":9,"Coordinates":[["21.110757","-86.841915"]]}; 
Bueno ahora veré como solucionar el problema de la llave que menciona.
Gracias compañeros.
  #7 (permalink)  
Antiguo 17/06/2013, 09:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Return y echo me dan resultados diferentes, por que?

El problema es que entre cada set de llaves, no tienes la , ¿para que haces el último foreach? Basta con que hagas json_encode de $polylinejson...
  #8 (permalink)  
Antiguo 17/06/2013, 09:38
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Return y echo me dan resultados diferentes, por que?

y justo después de $polylinejson te sobra un "."
  #9 (permalink)  
Antiguo 17/06/2013, 09:38
 
Fecha de Ingreso: junio-2013
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: Return y echo me dan resultados diferentes, por que?

Cita:
Iniciado por GatorV Ver Mensaje
El problema es que entre cada set de llaves, no tienes la , ¿para que haces el último foreach? Basta con que hagas json_encode de $polylinejson...
Tienes mucha razón GatorV , no se por que puse ese foreach, se me pasaron los dedos escribiendo, ya quedo todo perfecto, ya no tengo ningún error, y finalmente el código quedo así:


Código PHP:

$arrayJson 
= array();
    
$i 0;
    foreach(
$Rs as $Route)
    {
            
            foreach(
$Route->TrackerRouteList as $unit)
            {
                
$arrayJson[$i]['Unit'] = $unit->TrackerId;
                
$aux '';
                foreach(
$unit->CoordinateList as $Coordinates)
                {
                    
$arrayJson[$i]['Coordinates'][] = array($Coordinates->Latitude$Coordinates->Longitude);
                    
$aux=',\n';
                }
                
$i++;
                
                
            }
            
                
            
    }
         
    
$polylinejson.=json_encode($arrayJson);
    return 
$polylinejson
Muchas gracias compañeros doy por cerrado el caso ;)
  #10 (permalink)  
Antiguo 17/06/2013, 09:39
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Return y echo me dan resultados diferentes, por que?

no me refería a que añadieras un foreach antes del return, me refería a que cuando llames a ese método/función, la variable que recoge lo que te devuelve ese método/función debes recorrerla con un foreach
  #11 (permalink)  
Antiguo 17/06/2013, 09:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Return y echo me dan resultados diferentes, por que?

Por cierto, estas lineas:

Código PHP:
Ver original
  1. $polylinejson.=json_encode($arrayJson);
  2. return $polylinejson;

Si no haz definido antes $polylinejson, el hacer .= sobre esa variable te va a generar un E_NOTICE, si no estas usando esa variable, solamente haz un return json_encode($arrayJson);

Saludos.

Etiquetas: json
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 06:48.