Foros del Web » Programando para Internet » PHP »

Problema con ciclo while y mezclar ordenado arreglo

Estas en el tema de Problema con ciclo while y mezclar ordenado arreglo en el foro de PHP en Foros del Web. Necesito un while que me mezcle dos arreglos, pero no entiendo por que no sale del ciclo, al final termina con un ofsset -->Undefined offset: ...
  #1 (permalink)  
Antiguo 21/05/2009, 10:08
Avatar de el_gustavo  
Fecha de Ingreso: mayo-2009
Mensajes: 117
Antigüedad: 14 años, 11 meses
Puntos: 0
Problema con ciclo while y mezclar ordenado arreglo

Necesito un while que me mezcle dos arreglos, pero no entiendo por que no sale del ciclo, al final termina con un ofsset -->Undefined offset: 2

El codigo es el siguiente

$ra=0;
$rp=0;
$rt=0;
$restotal=array();

while($ra<count($refrombycountry) || $rp<count($retobycountry)){
if(strcmp($refrombycountry[$ra]['pais'],$retobycountry[$rp]['pais'] )<0){
$restotal[$rt]=$refrombycountry[$ra];
$ra++;
$rt++;
}
if(strcmp($refrombycountry[$ra]['pais'],$retobycountry[$rp]['pais'])>0){
$restotal[$rt]=$retobycountry[$rp];
$rp++;
$rt++;
}
if(strcmp($refrombycountry[$ra]['pais'],$retobycountry[$rp]['pais'])==0){
$restotal[$rt]['pais']=$refrombycountry[$ra]['pais'];
$restotal[$rt]['totalcalls']=$retobycountry[$rp]['totalcalls']+$refrombycountry[$ra]['totalcalls'];
$restotal[$rt]['conectcalls']=$retobycountry[$rp]['conectcalls']+$refrombycountry[$ra]['conectcalls'];
$restotal[$rt]['minutes']=$retobycountry[$rp]['minutes']+$refrombycountry[$ra]['minutes'];
$restotal[$rt]['balance']=$retobycountry[$rp]['balance']+$refrombycountry[$ra]['balance'];
$ra++;
$rp++;
$rt++;
}
if(!(isset($refrombycountry[$ra]))){
$restotal[$rt]=$retobycountry[$rp];
$rp++;
$rt++;
}
if(!(isset($retobycountry[$rp]))){
$restotal[$rt]=$refrombycountry[$ra];
$ra++;
$rt++;
}
}
}

Obviamente un arreglo puede tener mayor cantidad de elementos que otro o pueden tener la misma cantidad.
Da la casualidad, en un caso que ambos refrombycountry y retocountry tienen la misma cantidad de elementos y strmcp devuelve 0 en ambos casos, pero por alguna razon no sale del ciclo cuando debe salir

Última edición por el_gustavo; 21/05/2009 a las 10:15
  #2 (permalink)  
Antiguo 21/05/2009, 10:53
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Respuesta: Problema con ciclo while y mezclar ordenado arreglo

prueba con
Código PHP:
while($ra count($refrombycountry)-|| $rp count($retobycountry)-1
recuerda que los arrays empiezan en cero.
saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #3 (permalink)  
Antiguo 21/05/2009, 10:53
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 17 años, 1 mes
Puntos: 16
Respuesta: Problema con ciclo while y mezclar ordenado arreglo

Para mi que el count() de $refrombycountry o $retobycountry debe ser cero.

Poné algun echo o usa la funcion die() para poder parar el codigo y debuguear, asi lo vas a solucionar.
  #4 (permalink)  
Antiguo 21/05/2009, 10:56
Avatar de el_gustavo  
Fecha de Ingreso: mayo-2009
Mensajes: 117
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Problema con ciclo while y mezclar ordenado arreglo

Gracias por las ayudas, pero era algo mas simple que eso, no eran if sino else if, o sea, sino pasaba una cosa pasaba la otra, en total ahi les paso como quedo.

$ra=0;
$rp=0;
$rt=0;
$restotal=array();
$carfrom=count($refrombycountry);
$carto=count($retobycountry);
while($ra<$carfrom || $rp<$carto){
if(strcmp($refrombycountry[$ra]['pais'],$retobycountry[$ra]['pais'])==0){
$restotal[$rt]['pais']= $refrombycountry[$ra]['pais'];
$restotal[$rt]['totalcalls']=$retobycountry[$rp]['totalcalls']+$refrombycountry[$ra]['totalcalls'];
$restotal[$rt]['conectcalls']=$retobycountry[$rp]['conectcalls']+$refrombycountry[$ra]['conectcalls'];
$restotal[$rt]['minutes']=$retobycountry[$rp]['minutes']+$refrombycountry[$ra]['minutes'];
$restotal[$rt]['balance']=$retobycountry[$rp]['balance']+$refrombycountry[$ra]['balance'];
$ra++;
$rp++;
$rt++;
}
else if(strcmp($refrombycountry[$ra]['pais'],$retobycountry[$ra]['pais'])<0){
$restotal[$rt]['pais']= $refrombycountry[$ra]['pais'];
$restotal[$rt]['totalcalls']=$refrombycountry[$ra]['totalcalls'];
$restotal[$rt]['conectcalls']=$refrombycountry[$ra]['conectcalls'];
$restotal[$rt]['minutes']=$refrombycountry[$ra]['minutes'];
$restotal[$rt]['balance']=$refrombycountry[$ra]['balance'];
$ra++;
$rt++;
}
else if(strcmp($refrombycountry[$ra]['pais'],$retobycountry[$ra]['pais'])>0){
$restotal[$rt]['pais']= $retobycountry[$rp]['pais'];
$restotal[$rt]['totalcalls']=$retobycountry[$rp]['totalcalls'];
$restotal[$rt]['conectcalls']=$retobycountry[$rp]['conectcalls'];
$restotal[$rt]['minutes']=$retobycountry[$rp]['minutes'];
$restotal[$rt]['balance']=$retobycountry[$rp]['balance'];
$rp++;
$rt++;
}
else if (!(isset($retobycountry[$rp]))){
$restotal[$rt]['pais']= $refrombycountry[$ra]['pais'];
$restotal[$rt]['totalcalls']=$refrombycountry[$ra]['totalcalls'];
$restotal[$rt]['conectcalls']=$refrombycountry[$ra]['conectcalls'];
$restotal[$rt]['minutes']=$refrombycountry[$ra]['minutes'];
$restotal[$rt]['balance']=$refrombycountry[$ra]['balance'];
$rp++;
$rt++;
}
else if (!(isset($refrombycountry[$rp]))){
$restotal[$rt]['pais']= $retobycountry[$rp]['pais'];
$restotal[$rt]['totalcalls']=$retobycountry[$rp]['totalcalls'];
$restotal[$rt]['conectcalls']=$retobycountry[$rp]['conectcalls'];
$restotal[$rt]['minutes']=$retobycountry[$rp]['minutes'];
$restotal[$rt]['balance']=$retobycountry[$rp]['balance'];
$ra++;
$rt++;
}
}

En resumen, es de esos errores "bobos" de sintaxis que uno puede estar todo el dia buscandolo sin darse cuenta cual era el problema realmente.
Eits, fijate que si, los arreglos inician con 0 pero con tu consejo, el ciclo recorreria todos los elementos menos el ultimo.
Que bien, fijate que si los count dan cero entonces el ciclo ni siquiera inicia.

Gracias gente, ya vendre con otro error "particular", existe algun apartado para cake php?? estaria bueno hacerlo?? o no es tan usado por estos lares?

Lo dejo abierto por un rato al tema por si surge alguna eventualidad, despues lo cierro.
  #5 (permalink)  
Antiguo 21/05/2009, 11:02
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Respuesta: Problema con ciclo while y mezclar ordenado arreglo

el $rt esta en todos así que siempre aumenta, yo lo pondría una sola vez al final. antes de la llave '}' de cierre del while.

por cierto que bueno que diste con la solución.

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
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 01:12.