Ir al contenido


Foto

Sumar dentro de un foreach

php

  • Por favor identifícate para responder
5 respuestas en este tema

#1 xPAPUx

xPAPUx

    Member

  • Miembros
  • PipPip
  • 24 mensajes

Escrito 11 marzo 2018 - 07:58

Señores buenos días.

 

Tengo un pequeño problema y es primera vez que me pasa, tengo un foreach para recorre un array para ejecutar una consulta a una tabla por cada cantidad de items que contenga el array, hasta ahí normal, tengo una variable que traigo de otra consulta antes de hacer el foreach.

 

Por cada consulta que hace el array debo sumar el numero que resulta de la consultas con el numero que viene de la consulta antes de foreach.

 

El problema es que realizo la suma dentro del foreach y no la realiza algo así:


php
  1. // De esta consulta resulta el primer numero
  2. $sqlr = "SELECT * FROM T1";
  3. $conr = mysqli_query($conx, $sqlr);
  4. $R = mysqli_fetch_Assoc($conr);
  5.  
  6. // $lote es el array que recorro para realizar las consultas
  7. $ARR = [];
  8. foreach ($lote as $lot) {
  9. $sql = "SELECT * FROM T2 WHERE var = '".$lot."'";
  10. $con = mysqli_query($conx, $sql);
  11. $ls = mysqli_fetch_Assoc($con);
  12. // $RES es el resultado de la suma de la tabla antes del foreach y y el valor que trae la consulta dentro de foreach
  13. $RES = $R['numero1'] + $ls['numero2'];
  14. // Y el resutlado debe agregarse a otro array
  15. array_push($ARR, $RES);
  16.  
  17. }

EL problema radica que no realiza la suma por ejemplo el primer numero es 2000 y el segundo numero es 987 el resultado de esto es 2000987 mas no la suma de ambos números, realice un vardump para mirar el formato y sale como entero por ende no habría razón alguna para no realiza esta suma.

 

Existe una limitación dentro del foreach??


  • 0

#2 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 11 marzo 2018 - 10:11

Al parecer esta concatenando strings; podrias forzar la conversion a integer. Esto lo podes hacer casteando usando int o bien usando la funcion intval


php
  1. $result = (int) $R['numero1'] + (int) $R['numero2']
  2.  
  3. // tambien es valido usar la funcion intval
  4.  
  5. $result = intval($R['numero1']) + intval($R['numero2'])


  • 0

#3 xPAPUx

xPAPUx

    Member

  • Miembros
  • PipPip
  • 24 mensajes

Escrito 12 marzo 2018 - 05:55

 

Al parecer esta concatenando strings; podrias forzar la conversion a integer. Esto lo podes hacer casteando usando int o bien usando la funcion intval


php
  1. $result = (int) $R['numero1'] + (int) $R['numero2']
  2.  
  3. // tambien es valido usar la funcion intval
  4.  
  5. $result = intval($R['numero1']) + intval($R['numero2'])

 

Buenos días,  Agustin, ya lo intente así de esas dos formas y el resultado es el mismo, no se si dentro del for each no puedo sumar valores externos al for each con valores que resultan de for each, si prestas atención yo realice un vardump para mirar que formato tenían las variables antes de la suma y son enteros (int) de igual manera los concatena como un string, estoy pensando usar una función dentro del for each para realizar la suma externamente, no se si existe una limitación con el fore each. Gracias por tu aporte.


  • 0

#4 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 12 marzo 2018 - 07:20

No, no existe ninguna limitación. Habrá que depurar...Haz un echo de las variables, la suma y el arreglo en cada iteración del for
  • 0

#5 xPAPUx

xPAPUx

    Member

  • Miembros
  • PipPip
  • 24 mensajes

Escrito 12 marzo 2018 - 07:58

Agustin, ya lo hice y no entiendo por que sigue concatenando los resultados en vez de realizar la suma, para solucionar me toco guardar los resultados en un array y luego compararlos fuera del for each en una archivo con jquery. Lo solucione de esta forma pero quedo con la intriga, de igual forma muchas gracias por tu tiempo.


  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 marzo 2018 - 01:54

¿Y así?


php
  1. $R['numero1'] += $ls['numero2'];


  • 1





Etiquetado también con una o más de estas palabras: php

IP.Board spam blocked by CleanTalk.