Jump to content


Photo

Sumar dentro de un foreach

php

  • Please log in to reply
5 replies to this topic

#1 xPAPUx

xPAPUx

    Member

  • Miembros
  • PipPip
  • 24 posts

Posted 11 March 2018 - 07:58 AM

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 posts
  • LocationArgentina

Posted 11 March 2018 - 10:11 PM

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 posts

Posted 12 March 2018 - 05:55 AM

 

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 posts
  • LocationArgentina

Posted 12 March 2018 - 07:20 AM

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 posts

Posted 12 March 2018 - 07:58 AM

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
  • 7419 posts
  • LocationRepública Dominicana

Posted 26 March 2018 - 01:54 PM

¿Y así?


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


  • 1





Also tagged with one or more of these keywords: php

IP.Board spam blocked by CleanTalk.