Foros del Web » Programando para Internet » PHP »

array multidimensional con sumas

Estas en el tema de array multidimensional con sumas en el foro de PHP en Foros del Web. Hola de nuevo compañeros, tengo un problemilla para construir un array multidimensional con unas sumas por el medio... Como tiendo a liarme explicando, he creado ...
  #1 (permalink)  
Antiguo 17/01/2012, 05:27
 
Fecha de Ingreso: enero-2012
Ubicación: Serra do Galiñeiro
Mensajes: 20
Antigüedad: 11 años
Puntos: 1
Pregunta array multidimensional con sumas

Hola de nuevo compañeros,
tengo un problemilla para construir un array multidimensional con unas sumas por el medio...
Como tiendo a liarme explicando, he creado una imagen que creo describe bastante bien lo que necesito hacer



como se puede observar, quiero crear un array por campo (sumando los ceros y sustitullendo los 1 por x), y todos estos arrays a su vez en otro.
He intentado hacerlo combinando un for con un while, pero me atasco a la hora de hacer las sumas, incluso a la hora de construir el array creo...

Código PHP:
Ver original
  1. $consulta = "SELECT * FROM seq_bi ORDER BY id_seq_bi ASC";
  2. $resultado= mysql_query ($consulta, $conexion);
  3. for($campos=1; $campos<=50, $campos++,){
  4.   while($data=mysql_fetch_row($resultado)){
  5.     $objeto[$campos][ ]=$data[$numeros];
  6.  
  7.   }
  8. }

a ver si alguien puede indicarme el camino...

Saludos!
  #2 (permalink)  
Antiguo 17/01/2012, 06:30
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 12 años, 4 meses
Puntos: 331
Respuesta: array multidimensional con sumas

No se entiende qué necesitas, meter esa tabla en un array y sumar los valores?
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 17/01/2012, 06:52
 
Fecha de Ingreso: enero-2012
Ubicación: Serra do Galiñeiro
Mensajes: 20
Antigüedad: 11 años
Puntos: 1
Pregunta Respuesta: array multidimensional con sumas

Hola repara2,
ya he resuelto la parte del array, he releido alguna documentación y hecho algunas pruebas, paso la tabla a un único array que quedo asi

Código PHP:
Ver original
  1. $miarray[0] = 0000010000010000101011
  2. $miarray[1] = 0010101000100000101010
  3. $miarray[2] = 0001001010001001001001

...etc
lo que quiero es recorrer cada indice, contando los ceros parcialmente(y reemplazarlos por la suma), y cambiar los 1 por x (para que no se confundan con los resultados de la suma de ceros), y todo esto meterlo en un array multidimensional ...
ese array de arriba de ejemplo debería quedar asi
Código PHP:
Ver original
  1. $myarray[0][0]=4;
  2. $myarray[0][1]=x;
  3. $myarray[0][2]=5;
  4. $myarray[0][3]=x ;
  5.                  ....etc
  6. $myarray[1][0]=2;
  7. $myarray[1][1]=x;
  8. $myarray[1][2]=1;
  9. $myarray[1][3]=x ;
  10.                  ....etc
  11. ....etc

Saludos.
  #4 (permalink)  
Antiguo 17/01/2012, 09:51
 
Fecha de Ingreso: enero-2012
Ubicación: Serra do Galiñeiro
Mensajes: 20
Antigüedad: 11 años
Puntos: 1
Pregunta Respuesta: array multidimensional con sumas

Sigo intentando armar el código, creo que mas o menos debería ser algo asi:

Código PHP:
Ver original
  1. $consulta = "SELECT * FROM seq_bi ORDER BY id_seq_bi ASC";
  2. $resultado= mysql_query ($consulta, $conexion);
  3. $u=0;
  4. for($campo=1,$campo<=50,$campo++){
  5.   while($data=mysql_fetch_array($resultado)){
  6.     if($data["'seq_bi'.$campo"]==0){
  7.       if($u==0){
  8.     $objeto[$campo][]='x';
  9.     $u++;
  10.       }else{
  11.     $u++;
  12.       }
  13.     }
  14.     if($data["'seq_bi'.$campo"]==1){
  15.       $objeto[$campo][]=$u;
  16.       $u=0;
  17.     }
  18.   }
  19. $u=0;
  20. }

en la tabla hay 50 campos (seq_bi1,seq_bi2,seq_bi3...etc), que serían los del for, luego ejecuto el while una vez por campo...sería correcta la sintaxis de ese código??

Gracias.Saludos!
  #5 (permalink)  
Antiguo 17/01/2012, 14:13
 
Fecha de Ingreso: enero-2012
Ubicación: Serra do Galiñeiro
Mensajes: 20
Antigüedad: 11 años
Puntos: 1
Pregunta Respuesta: array multidimensional con sumas

Con el mismo código, con un pequeño cambio, consigo crear solo el array del primer índice, por fin he conseguido activar los errores de php (he seguido un aporte de este foro para configurar el php.ini de mi apache2), y la sintaxis parece estar bien, pero algo falla...
Código PHP:
Ver original
  1. $consulta = "SELECT * FROM seq_bi ORDER BY id_seq_bi ASC";
  2. $resultado= mysql_query ($consulta, $conexion);
  3. $u=0;
  4. for($nu=1; $nu<=50; $nu++) {
  5.   $campo="seq_bi".$nu;
  6.   while($data=mysql_fetch_array($resultado)) {
  7.     if($data[$campo]==0){
  8.       if($u==0){
  9.     $objeto[$nu][]='x';
  10.     $u++;
  11.       }else {
  12.     $u++;
  13.       }
  14.     }
  15.     if($data[$campo]==1){
  16.       $objeto[$nu][]=$u;
  17.       $u=0;
  18.     }
  19.   }
  20. $u=0;
  21. }

a ver si alguien puede darme alguna pista de que esta fallando.

Saludos.
  #6 (permalink)  
Antiguo 17/01/2012, 16:19
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 11 años, 6 meses
Puntos: 793
Respuesta: array multidimensional con sumas

Retomando la idea del inicio cuentas los ceros e imprimes las x

Código PHP:
Ver original
  1. <?php
  2. $arr[0] = '0000010000010000101011'; //1 de ejemplo
  3.  
  4. $newarr = array();
  5.  
  6. foreach ($arr as $c => $v) {
  7.    
  8.     $s = str_replace('1', '|x|', $v);
  9.     $res = explode('|', $s);
  10.    
  11.     foreach ($res as $r) {
  12.         if (strlen($r) > 0 && $r == '0') {
  13.             $newarr[$c][] = strlen($r);
  14.         } else if ($r == 'x') {
  15.             $newarr[$c][] = 'x';
  16.         }
  17.     }
  18.  
  19. }
  20.  
  21. echo '<pre>';
  22. print_r($newarr);
  23. echo '</pre>';

Resultado:

Cita:
Array
(
[0] => Array
(
[0] => 5
[1] => x
[2] => 5
[3] => x
[4] => 4
[5] => x
[6] => 1
[7] => x
[8] => 1
[9] => x
[10] => x
)

)
Espero no haber dado mucha vuelta y que te confundas más.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 18/01/2012, 14:56
 
Fecha de Ingreso: enero-2012
Ubicación: Serra do Galiñeiro
Mensajes: 20
Antigüedad: 11 años
Puntos: 1
Respuesta: array multidimensional con sumas

Hola andresdzphp, gracias por responder!
He intentado usar tu código, pero no lo conseguí, me da que estaba formando mal el array que le pasaba.
Encontré una solucion, no muy elegante y menos práctica aún, pero...funciona

Código PHP:
Ver original
  1. $ceros=0;
  2. $unos=0;
  3. while($data=mysql_fetch_array($resultado)) {
  4.   if($data[1]==0){
  5.     if($ceros==0 and $unos==1){
  6.       $ceros++;
  7.       $objeto[1][]='x';
  8.       $unos=0;
  9.     }else{
  10.       $ceros++;
  11.     }
  12.   }else{
  13.     if($ceros==0){
  14.       $objeto[1][]='x';
  15.     }else{
  16.       $objeto[1][]=$ceros;
  17.       $ceros=0;
  18.       $unos++;
  19.     }
  20.   }
  21. }

en este ejemplo solo proceso el primer campo de datos de la tabla, luego tendría que repetir este trozo

Código PHP:
Ver original
  1. if($data[1]==0){
  2.     if($ceros==0 and $unos==1){
  3.       $ceros++;
  4.       $objeto[1][]='x';
  5.       $unos=0;
  6.     }else{
  7.       $ceros++;
  8.     }
  9.   }else{
  10.     if($ceros==0){
  11.       $objeto[1][]='x';
  12.     }else{
  13.       $objeto[1][]=$ceros;
  14.       $ceros=0;
  15.       $unos++;
  16.     }
  17.   }

40 y pico veces mas pero cambiando el número de índice y las variables que cuentan los unos y los ceros, si alguno me indicais alguna alternativa mas elegante, realizaría mas pruebas antes de decantarme por escribir el tocho.

Ya he probado a meter el while dentro de un for, para controlar las repeticiones por campo

Código PHP:
Ver original
  1. $runos=0;
  2. $rceros=0;
  3. for($r=1; $r<=50; $r++){
  4. while($rdata=mysql_fetch_array($rresultado)) {
  5.   if($rdata[$r]==0){
  6.     if($rceros==0 and $runos==1){
  7.       $rceros++;
  8.       $robjeto[$r][]='x';
  9.       $runos=0;
  10.     }else{
  11.       $rceros++;
  12.     }
  13.   }else{
  14.     if($rceros==0){
  15.       $robjeto[$r][]='x';
  16.     }else{
  17.       $robjeto[$r][]=$rceros;
  18.       $rceros=0;
  19.       $runos++;
  20.     }
  21.   }
  22. }
  23. }


pero no funciona, solo hace el while el primer ciclo del for y me guarda un único array en el primer indice, ya no se que probar, alguna idea?


Saludos.
  #8 (permalink)  
Antiguo 18/01/2012, 15:39
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 11 años, 6 meses
Puntos: 793
Respuesta: array multidimensional con sumas

Creo que el diseño de la base de datos no es lo mejor, pero así como lo tienes en una sola consulta funciona. A lo mejor te da alguna idea esto:

Código PHP:
Ver original
  1. <?php
  2. $c = mysql_connect('localhost', 'root', '12345');
  3. $res = mysql_query('SELECT * FROM seq_bi ORDER BY id_seq_bi ASC');
  4.  
  5. $arr  = array();
  6. $newarr = array();
  7.  
  8. while($data=mysql_fetch_array($res)) {
  9.     $str = '';
  10.     for ($i = 1; $i <= 50; $i++) {
  11.         $indice = "seq_bi$i";
  12.         $str .= $data[$indice];
  13.     }
  14.     $arr[] = $str;
  15. }
  16.  
  17. foreach ($arr as $c => $v) {
  18.    
  19.     $s = str_replace('1', '|x|', $v);
  20.     $res = explode('|', $s);
  21.    
  22.     foreach ($res as $r) {
  23.         if (strlen($r) > 0 && $r == '0') {
  24.             $newarr[$c][] = strlen($r);
  25.         } else if ($r == 'x') {
  26.             $newarr[$c][] = 'x';
  27.         }
  28.     }
  29.  
  30. }
  31.  
  32. echo '<pre>';
  33. print_r($newarr); //El nuevo array
  34. echo '</pre>';
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Etiquetas: arraymultidimensional, bucle
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:11.