Foros del Web » Programando para Internet » PHP »

problema tonto con un foreach (o raro talvez)

Estas en el tema de problema tonto con un foreach (o raro talvez) en el foro de PHP en Foros del Web. buenas tardes: tengo un problema medio tonto pero estuve toda la tarde tratando de encontrarle la vuelta y la verdad nada. es asi. yo tengo ...
  #1 (permalink)  
Antiguo 07/08/2008, 14:15
 
Fecha de Ingreso: junio-2008
Mensajes: 87
Antigüedad: 15 años, 10 meses
Puntos: 0
problema tonto con un foreach (o raro talvez)

buenas tardes: tengo un problema medio tonto pero estuve toda la tarde tratando de encontrarle la vuelta y la verdad nada. es asi.
yo tengo un array asociativo que saco una base de datos y esos datos los quiero pasar a un excel entonces que hago, tengo dos funciones que le dan formato de tabla html al array las funciones son muy sencillas tienen un for each cada una por que es un array asociativo
son algo asi

Código:
 function f1($row){
      foreach($row as $key => $value)
     {
           //meter $value entre <td></td>
      }
//y despues eso metelo entre <tr></tr> y guardalo en la variable contenido
}
function f2($array){

      foreach($array as $value){
             f1($value)
      }
}
se entiende el codigo exacto no lo tengo amano ahora pero es eso en f2 recorro el array y saco las rows de la tabla y en f2 le doy formato a cada row y la variable contenido esa variable es privada a un objeto y lo que queda ahi es el array ya con formato de tabla html.
deberia andar y de hecho anda solo que en algunas situaciones pierde los ultimos datos.

por ejemplo tire una consulta de 30 rows con 20 columnas c/row y la muestra ok

despues la misma tabla la misma consulta pero en vez de mostrar 30 muestro 50 y pierde la mitad del anteultimo y todo el ultimo registro.

y despues tire una consulta que tra 8304 registro y mostro bien 8303 registros pero perdio la mitad del ultimo... ya no se que puee pasar es demasiado raro y las funciones son muy simples..
ademas no es que estan mal los arrays si tiro un print_r() del array los datos estan todos....
es muy pero muy raro

si alguiem me da una mano se lo agradezco..

Mucha gracias a todos
  #2 (permalink)  
Antiguo 07/08/2008, 16:05
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: problema tonto con un foreach (o raro talvez)

Holas j4v13r

Pareciera que el error fuera del HTML resultante (el que se guarda en $contenido). Te sugiero que ejecutes el procedimiento y luego veas el código fuente del resultado, esto es, el HTML desde el navegador, de modo de ver si te está cerrando bien las tags HTML.
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #3 (permalink)  
Antiguo 07/08/2008, 16:14
 
Fecha de Ingreso: septiembre-2006
Ubicación: Buenos Aires
Mensajes: 125
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: problema tonto con un foreach (o raro talvez)

No se si será; pero foreach trabaja con una copia de la matriz.
Por lo tanto si modificas mientras estas recorriendo con el foreach vas a tener problemas.
para modificar un matriz $matriz[indice]="lo que quieras";

saludos
__________________
alquiler gesell
  #4 (permalink)  
Antiguo 07/08/2008, 20:15
 
Fecha de Ingreso: junio-2008
Mensajes: 87
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: problema tonto con un foreach (o raro talvez)

gracias por sus respuestas pero no no hago ningun de tipo de modificacion y no no es problema de cierre de tags. ya lo revise y los tags estan normales y bien cerrados
sensillamente los datos no estan... :S no le enceuntro la vuelta
  #5 (permalink)  
Antiguo 07/08/2008, 20:18
 
Fecha de Ingreso: junio-2008
Mensajes: 87
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: problema tonto con un foreach (o raro talvez)

el codigo exacto es este
Código PHP:
function f1($row){
  foreach(
$row as $key=>$value){
  
$var .= '<td>'.$value.'</td>';
  }
$this->contenido .= '<tr>'.$var.'</tr>';
}
function 
f2($array){
foreach(
$row as $value){
  
f1($value);

como ven son solo dos foreach no entiendo como puedo perder los registros no me cierra algo hago mal pero no se que.

gracias

Última edición por j4v13r; 07/08/2008 a las 20:22 Razón: se me apreto solo el guardar cuando le di tab :S costumbre
  #6 (permalink)  
Antiguo 07/08/2008, 22:10
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Respuesta: problema tonto con un foreach (o raro talvez)

Código PHP:

function f1($row)
{
    foreach(
$row as $value)
    {
       
$var .= '<td>'.$value.'</td>';
   }
       
$this->contenido .= '<tr>'.$var.'</tr>';

   return;

__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #7 (permalink)  
Antiguo 08/08/2008, 06:22
 
Fecha de Ingreso: junio-2008
Mensajes: 87
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: problema tonto con un foreach (o raro talvez)

y para que el return si no necesito devolver nada?
  #8 (permalink)  
Antiguo 08/08/2008, 08:49
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: problema tonto con un foreach (o raro talvez)

Mmh, también puede ser problema de memoria O_O... Me refiero a que como vas agregando contenido a la variable $this->contenido, de pronto llega un momento en que se satura la memoria del servidor y no sigue llenándola. Y si no tienes activado ver errores de PHP en el servidor, entonces simplemente ves que no hace toda la tarea, en vez de saber que no se completó debido a un determinado error. Esto se me ocurrió porque como dices que con 30 registros te funciona, pero con 50 te sale incompleto...

Al menos a mí me pasó algo así con una clase que generaba código KML y PHP me arrojaba error de máximo de memoria alcanzado, o algo así, que significaba que la variable que se iba llenando con el código KML ocupaba demasiado espacio en memoria... Lo solucionamos esa vez aumentando el máximo de memoria usable... (lo cual es solución parche, claro está, como todo lo que se hace en mi empresa, jajaja xD).
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #9 (permalink)  
Antiguo 08/08/2008, 09:02
 
Fecha de Ingreso: junio-2008
Mensajes: 87
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: problema tonto con un foreach (o raro talvez)

no creo que sea ese el problema. el servidor lo administro yo tiene 2gb de ram y el php tiene el limite de memoria configurado a 2gb de memoria, tiene activado el muestro de todos los errores por que es un servidor de testing no productivo y ademas lo mas extraño re todo es que hoy tire una consulta que trae un array de 9750 filas y 17 columnas y no me perdio ni un bit :S me esta volviendo loco.. ni hice un solo cambio en las funciones ni en la configuracion del server no entiendo por que ciertas consultas las devuelve bien y ciertas otras no..
ni siqueira puedo decir que sea problema del mysql que me devuelve mal los datos por que antes de pasarlo por esas funciones renderizo el codigo en el browser
y adivina que: esta hasta el ultimo bit!!!!!
se pierde despeus de que lo paso por las funciones en algun punto en elmedio el cual no puedo encontrar.

gracias por la idea de todas formas seguire investigando
  #10 (permalink)  
Antiguo 08/08/2008, 09:20
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: problema tonto con un foreach (o raro talvez)

bueno pero si teienes q poner solo eso no hace flata q hagas tanto lio mira q facil se pude hacer

$resultado='<td>'.implode('</td><td>',$arreglo).'</td>';

espero te sirva
__________________
Degiovanni Emilio
developtus.com
  #11 (permalink)  
Antiguo 08/08/2008, 09:56
 
Fecha de Ingreso: junio-2008
Mensajes: 87
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: problema tonto con un foreach (o raro talvez)

emiliodeg, no entendiendo que estas queriendo hacer con esa linea..
mi funcion recibe algo asi :
Código PHP:
array ([0] => array([0] => "columna1",[1] => "columna2",[2] => "columna3")
           [
1] => array([0] => "columna1",[1] => "columna2",[2] => "columna3")
           [
2] => array([0] => "columna1",[1] => "columna2",[2] => "columna3")); 
y tiene que quedar asi:
Código HTML:
<tr>
<td>columna1</td><td>columna2</td><td>columna3</td>
</tr>
<tr>
<td>columna1</td><td>columna2</td><td>columna3</td>
</tr>
<tr>
<td>columna1</td><td>columna2</td><td>columna3</td>
</tr> 
se entiende? bueno lo que me pierde seria mas o menos esto

Código HTML:
<tr>
<td>columna1</td><td>columna2</td><td>columna3</td>
</tr>
<tr>
<td>columna1</td><td>columna2</td><td>columna3</td>
</tr>
<tr>
<td>columna1</td>
</tr> 
espero se entienda
  #12 (permalink)  
Antiguo 11/08/2008, 12:42
 
Fecha de Ingreso: junio-2008
Mensajes: 87
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: problema tonto con un foreach (o raro talvez)

gracias a todos por la ayuda.. ya logre resolverlo... pasa que no podia usar debugger para revisar el codigo por que uso mod rewite y el dbg de nusphere agrega cosas en la url... bueno ya lo arregle era un idiotes.. pasa que antes de mandarlo a imprimir ponia este header

header("Content-Length: ".strlen($tmp)); en donde $tmp era la variable que tia todo los datos y al parecer me devolvia mal tamaño o algo.. cuando saque esa linea empezo a andar ok. gracias a todos por sus consejos :D
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 19:20.