Ver Mensaje Individual
  #6 (permalink)  
Antiguo 26/10/2006, 15:08
Avatar de Erikfrancisco
Erikfrancisco
 
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 6 meses
Puntos: 4
Lo que debes hacer despues de tu consulta es crear un bucle que a su vez cree un array para que meta las operaciones en este luego cierras el bucle y todo queda como estaba, eso es todo lo que había que hacer:

Código PHP:
<?php
// esta función se encargará de resolver las operaciones que se le pasen de estilo 24*3+2/8-5 (cadena)

// donde $cu_op es cual operacion deseamos realizar
function realiza_operacion $cu_op )
{  
   
$operacion $cu_op;  // definimos una variable $operacion que contendrá como valor la operación que le pasamos a la función
   
$pos 0// esta variable es la posición desde donde vamos a comparar, es decir desde el principio

   
if ( !is_int $operacion ) ) // si no es un número entero es decir, un número sólo como 50 hacemos las operaciones
   
{  // recorremos cada caracter de la variable $operacion para detectar que operaciones realizar (algo así como recorrer letra por letra)
      
for ( $y 0$y strlen $operacion ); $y++ )
      {  
         
$operaciones = array ( '+''-''*''/' ); // definimos un array con las operaciones validas suma, resta, ...

         
for ( $x $x count $operaciones ); $x++ )
         {  
            if ( 
substr $operacion$pos) == $operaciones[$x] ) // comparamos si el caracter es igual a una operacion de ser así lo guardamos en un array
            
{  
               
// si encontro una operación guardamos su posicion y la operacion separados por coma
               
$op[] = $pos.",".substr $operacion$pos);  
            }  
         }  
         
$pos += 1// aumentamos una unidad a la posición para comparar el siguiente carácter
      
}  

      
$contador 1// nos indicará cuantas operaciones ya hemos realizado

      // Esta variable nos servirá para ir sumando los resultados después de realizar una operacion ya que no las hará todas de un sólo jalon
      // se irán resolviendo por pares ejemplo 5+2-1/2 primero resolverá 5+2 y luego la variable acumula contendrá ahora 7 a esto le restaremos
      // 1 y acumula contendrá ahora 6 luego se dividirá entre 2 y finalmente acumula contendrá 3
      
$acumula 0;

      for ( 
$e 0$e count ($op); $e++ ) // realizamos un bucle que se repetirá tantas veces como operaciones tengamos
      
{  // con esto dividimos el contenido del array $op[$e] ya que si recordamos guardamos su posicion y la operacion separados por coma
         
$divide explode ","$op[$e] );
         
// ahora el array $divide[0] será la posición del símbolo de la operación a realizar
         // y $divide[1] será el símbolo de la operación ( "+" por decir un ejemplo )

         
if ( $e != count $op ) - // si aún no es la última operación
         
{  
            
$siguiente explode ","$op[$e 1] );  
            
// obtenemos la posición de la siguiente operación para así realizar la anterior, me explico, si tenemos esta operación 5+2-3
            // vamos a realizar primero 5+2 pero para poder realizarlo debemos saber que posición ocupa la siguiente operacion en este caso
            // el símbolo de la sig. operación se encuentra en la posición 4 (-)
            
$sig_operacion $siguiente[0] + 1;
         }  
         else 
// si es la última operación a realizar
         
{  
            
$sig_operacion strlen $operacion ) - ( $divide[0] + ); // obtenemos la cadena restante
         
}  

         if ( 
$contador == // es la primera operación a realizar
         
{  
            
$calcula[] = substr $operacion0$divide[0] ); // obtenemos el primer número para la operacion en el ejemplo de 5+2 obtendríamos 5
            
$calcula[] = substr $operacion$divide[0] + 1$sig_operacion ); // obtenemos el segundo num. para la operación en el ej. sería 2

            
switch ( $divide[1] ) // hacemos la operación correspondiente recuerda que $divide[1] es el simbolo "+" en el caso de nuestro ejemplo
            
{  
               case 
'+'// si $divide[1] contiene el símbolo + realizaremos una suma
                  
$resultado $calcula[0] + $calcula[1];  
                  break;  
               case 
'-'// si $divide[1] contiene el símbolo - realizaremos una resta
                  
$resultado $calcula[0] - $calcula[1];  
                  break;  
               case 
'*'// si $divide[1] contiene el símbolo * realizaremos una multiplicación
                  
$resultado $calcula[0] * $calcula[1];  
                  break;  
               case 
'/'// si $divide[1] contiene el símbolo / realizaremos una división
                  
$resultado $calcula[0] / $calcula[1];  
                  break;  
               default: 
// si $divide[1] no contiene ninguno de los símbolos mandamos un mensaje
                  
echo '<p>No es una operación valida.</p>';  
                  break;  
            }  

            
$acumula $resultado// le pasamos el resultado a acumula
            
$contador += 1// sumamos una unidad a la variable $contador para indicar que ya se hizo la primera operación
         
}  
         else 
// si es más de una operación a realizar
         
{  
            
$calcula substr $operacion$divide[0] + 1$sig_operacion ); // obtenemos el sig. número con el que realizar la operación

            
switch ( $divide[1] ) // hacemos la siguiente operación (- en caso de nuestro ejemplo) con el resultado acumulado y el sig. número ( 3 en el ejemplo )
            
{
               case 
'+':  
                  
$resultado $acumula $calcula;  
                  break;  
               case 
'-':  
                  
$resultado $acumula $calcula;  
                  break;  
               case 
'*':  
                  
$resultado $acumula $calcula;  
                  break;  
               case 
'/':  
                  
$resultado $acumula $calcula;  
                  break;  
               default:  
                  echo 
'<p>No es una operación valida.</p>';  
                  break;  
            }  
            
$acumula $resultado;  
         }  
      }  

      
$operacion $acumula// le asignamos a la variable $operación el resultado final
      
return $operacion;   
   }   
   else 
// si es un número entero sólo lo pasamos así (No realizamos ninguna operación)
   
{  
      return 
$operacion;  
   }  


// supongo que $sqlcon es la consulta y $dbi es la conexion que serían unas líneas como esta 
// $dbi = mysql_pconnect ( 'servername', 'username', 'password' ); 
// mysql_select_bd ( 'basededatos' ); 
// $sqlcon = "SELECT campos FROM tabla WHERE condiciones"; 

$resucon mysql_query $sqlcon$dbi ); 

while ( 
$filacon mysql_fetch_array $resucon ) ) 

   
// $formula son las operaciones a realizar, mejor definela como un array para que así se te 
   // agreguen solitas sin necesidad de ponerlas a mano así 
   
$operaciones[] = $filacon["for_id"]; 
   
// con $operaciones[] definimos $operaciones como un array y en cada iteración del bucle while 
   // se irán agregando las operaciones dentro de este array 


$acum_total 0// esta variable servirá para hacer la suma de todos los resultados de las operaciones que estaban en el array $operaciones[]

for ( $t 0$t count $operaciones ); $t++ )
{  
// le pasamos la operación a realizar a la función realiza_operacion() y el resultado se almacenará en la variable $op_resuelta
   
$op_resuelta realiza_operacion $operaciones[$t] );
   echo 
"El resultado de la operación ".$operaciones[$t]." es: ".$op_resuelta."<br/>"// mostramos en pantalla la operación que se hizo y su resultado
   
$acum_total += $op_resuelta// le sumamos el resultado de la operación a la variable $acum_total
}  
echo 
"<p>La suma total de todas las operaciones es: ".$acum_total;  
?>
Nota: dejo el código con comentarios para que entiendas tú y todo el que lo lea que es lo que va haciendo el código. Espero que con esto ya se entienda mejor que es lo que fui haciendo.
Suerte

Última edición por Erikfrancisco; 27/10/2006 a las 09:23