Foros del Web » Programando para Internet » PHP »

tomar el último valor de array

Estas en el tema de tomar el último valor de array en el foro de PHP en Foros del Web. Saludos... En mi último POST, GatorV me mostró una forma sencilla de sumar arrays provenientes de una base de datos. La estructura básica la muestroa ...
  #1 (permalink)  
Antiguo 23/08/2010, 03:09
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Pregunta tomar el último valor de array

Saludos...

En mi último POST, GatorV me mostró una forma sencilla de sumar arrays provenientes de una base de datos. La estructura básica la muestroa continuación:

Código PHP:
Ver original
  1. $consulta = "SELECT tipo, sum(valor), COUNT(unidades) FROM miTabla GROUP BY tipo;";
  2. $resultado = mysql_query($consulta) or die (mysql_error());
  3. $total = array();
  4. while ($col = mysql_fetch_array($resultado, MYSQL_NUM)) {
  5.               $suma = $col[1];
  6.               $conteo = $col[2];
  7.  
  8.               $total[] = ($suma / $conteo);
  9. }
  10. echo array_sum($total);

De esa manera, fuera del 'while' sumo el array que se ejecuta dentro del mismo. Sin embargo necesitaría que esa suma se presente dentro del 'while', pues debo de tenerlo como referencia para realizar otras operaciones matemáticas con los valores que se generan dentro.
He intentado listarlo como array y tomar su último valor de la siguiente manera:

Código PHP:
Ver original
  1. $consulta = "SELECT tipo, sum(valor), COUNT(unidades) FROM miTabla GROUP BY tipo;";
  2. $resultado = mysql_query($consulta) or die (mysql_error());
  3. $total = array();
  4. while ($col = mysql_fetch_array($resultado, MYSQL_NUM)) {
  5.               $suma = $col[1];
  6.               $conteo = $col[2];
  7.  
  8.               $total[] = ($suma / $conteo);
  9.               $total_ultimo = current(array_sum($total));
  10.  
  11. echo array_sum($total_ultimo);
  12. }

Sin embargo me lista todos mis valores (sin comas) incluyendo la suma como último valor.

Cómo podría, dentro de mi 'while' dejar solo ese último valor sumado?

Gracias!
__________________
Andrew :P
  #2 (permalink)  
Antiguo 23/08/2010, 03:26
Avatar de dedydamy  
Fecha de Ingreso: marzo-2010
Ubicación: Aca :D
Mensajes: 78
Antigüedad: 14 años, 1 mes
Puntos: 4
Respuesta: tomar el último valor de array

ultimo valor de un array :D

Código PHP:
Ver original
  1. <?
  2. $variable=array('dedydamy','no','ha','dormido');
  3. echo end($variable);//escribe dormido :P
  4. ?>

Salu2!!
__________________
http://dedydamy.com/
  #3 (permalink)  
Antiguo 23/08/2010, 03:52
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Pregunta Respuesta: tomar el último valor de array

Gracias por responder dedydamy...

Sin embargo en mi ejemplo el 'end' o el 'current' no funcionan y me generan un error:

Código HTML:
Ver original
  1. warning: end() [function.end]: Passed variable is not an array or object

Pues no toma el '$total' como un array (?)
__________________
Andrew :P
  #4 (permalink)  
Antiguo 23/08/2010, 04:01
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: tomar el último valor de array

Hola.

No entiendo qué es lo que necesitás hacer...

Pero si es solo para acceder al último elemento del array puedes hacerlo de una forma sencilla así:

Código PHP:
$ultimo $array[count($array)-1]; 
Saludos!
  #5 (permalink)  
Antiguo 23/08/2010, 04:04
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: tomar el último valor de array

Creo que en realidad lo que necesitas es llevar un acumulador y un contador, en lugar de un array. ¿Por qué no nos explicas un poco mejor lo que necesitas?

Saludos!
  #6 (permalink)  
Antiguo 23/08/2010, 04:14
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: tomar el último valor de array

Hola GEK... Gracias por tu respuesta... Bien, me explico mejor con el ejemplo real basado en el codigo citado inicialmente.

El script que os comento en mi primer post , fuera del 'while' me daría como resultado lo siguiente:
Código HTML:
Ver original
  1. (...)
  2. } //cierre del while
  3. echo array_sum($total); // imprime 210

Esto es la suma de todos los valores que se listan en la cadena.

Ahora bien, en el mismo script, la suma dentro del 'while' me daría como resultado lo siguiente:

Código HTML:
Ver original
  1. (...)
  2. echo array_sum($total); // imprime 1234567891011121314151617181920210
  3. } //cierre del while

Eso significa que la suma de 1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20 es como resultado el último valor de la cadena '210'.

Es por eso que quiero tomar el último valor dentro del 'while', pues lo necesito para otra serie de operaciones con los valores de otras cadenas que no se generan más que dentro de ese 'while'.

He intentado con el 'end', 'current' y como me aconsejas en tu penúltimo post, pero aparentemente no reconoce el 'array_sum($total)' como un array previo.
__________________
Andrew :P
  #7 (permalink)  
Antiguo 23/08/2010, 04:21
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: tomar el último valor de array

Hola,

Si es que solo necesitas el valor, prueba usar una variable como acumulador en lugar de un array. Eso te dará en cada ciclo la suma de todos los elementos anteriores, y al finalizar el array tendrás la suma total:

Código PHP:
$consulta "SELECT tipo, sum(valor), COUNT(unidades) FROM miTabla GROUP BY tipo;";
$resultado mysql_query($consulta) or die (mysql_error());
$total 0;
while (
$col mysql_fetch_array($resultadoMYSQL_NUM)) {
              
$suma $col[1];
              
$conteo $col[2];
 
              
$total+=($suma $conteo);

Saludos!
  #8 (permalink)  
Antiguo 23/08/2010, 04:58
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: tomar el último valor de array

Me devuelve lo mismo:

Código PHP:
Ver original
  1. (...)
  2. $total+=($suma / $conteo);
  3. echo $total; // imprime 1234567891011121314151617181920210
  4. }

__________________
Andrew :P
  #9 (permalink)  
Antiguo 23/08/2010, 05:05
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: tomar el último valor de array

Claro porque en cada ciclo, $total tiene la suma parcial. No es que ese echo imprime todo eso, sino que imprime la suma en cada ciclo del while y final ves que queda todo junto.

$total es la variable que deberías usar para hacer tus operaciones.

Saludos!
  #10 (permalink)  
Antiguo 23/08/2010, 06:25
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Pregunta Respuesta: tomar el último valor de array

Gracias geq...

Sin embargo no estoy muy seguro de ello... Si, por ejemplo, quiero dividir ese gran total entre cada uno de los valores de la división, el resultado sería esto (acumulados en rojo):

1 => 1
2 => 3
3 => 6
4 => 10
5 => 15
(...)
20 => 210
210 (Total)

Y en cualquier caso, la relación tendría que quedar así:

1 => 210
2 => 210
3 => 210
4 => 210
5 => 210
(...)
20 => 210
210 (Total)

Esto con el propósito de sacar un porcentaje. Cùomo podría, pues fijar este aspecto?
__________________
Andrew :P
  #11 (permalink)  
Antiguo 23/08/2010, 06:44
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: tomar el último valor de array

Bien, ahora creo que nos entendemos.

Puedes bien pedirle a mysql que te sume los valores y te lo devuelva en la query, o hacer otra query antes que te los sume.

Aca va un ejemplo, quizás haya algo más eficiente pero necesitaría conocer tu tabla para poder hacerlo.

Código PHP:
$result=mysql_query("SELECT sum(valor) m FROM miTabla"); 
$suma=mysql_result($result,0,"m"); 
En caso de que solo necesites la suma de valor. Si no, dejas el query anterior y lo repites con lo que necesites abajo. $total habrá quedado en 210.

Saludos!
  #12 (permalink)  
Antiguo 23/08/2010, 06:56
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: tomar el último valor de array

Lo siento, he perdido el hilo..; Qué quiere decir "m" en la consulta?
__________________
Andrew :P
  #13 (permalink)  
Antiguo 23/08/2010, 07:03
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: tomar el último valor de array

Cita:
Iniciado por andrewp Ver Mensaje
Lo siento, he perdido el hilo..; Qué quiere decir "m" en la consulta?
OK!... Ya entiendo lo que me dices... El problema es que esa suma se desprende de la división de dos columnas que salen de la misma consulta:
Código PHP:
Ver original
  1. $suma = $col[1];
  2.               $conteo = $col[2];
  3.  
  4.               $total+=($suma / $conteo);

En cualquier caso tendría que hacer dicha operación matemática en la consulta y de acuerdo a nuestros amigos de Mysql eso es un tanto difiícil
__________________
Andrew :P
  #14 (permalink)  
Antiguo 23/08/2010, 07:10
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: tomar el último valor de array

Al poner una palabra luego de un campo o una tabla, le estás asignando un alias, es como usar "AS" (es decir, la columna sum(valor) se llamaría m).

Si es así entonces puedes optar por el último caso: Primero sumas y luego haces el otro proceso, que no sería más que hacer primero

Código PHP:
$consulta "SELECT tipo, sum(valor), COUNT(unidades) FROM miTabla GROUP BY tipo;"
$resultado mysql_query($consulta) or die (mysql_error()); 
$total 0
while (
$col mysql_fetch_array($resultadoMYSQL_NUM)) { 
              
$suma $col[1]; 
              
$conteo $col[2]; 
  
              
$total+=($suma $conteo); 

y luego de eso relizar otro query o lo que fuere necesario para hacer el resto del proceso, con $total como la suma.

Saludos!
  #15 (permalink)  
Antiguo 23/08/2010, 08:08
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Pregunta Respuesta: tomar el último valor de array

Gracias por tu ayuda y no quiero resultar pesado con este tema... Entiendo que es difícil muchas veces explicar a distancia lo que realmente uno busca.

Sin embargo, la opción que me das le he intentado varias veces (antes y después), dos consultas con un único fin; desafortunadamente no logro encontrar lo que busco.

Acaso no hay ninguna posibilidad de convertir:
Código PHP:
Ver original
  1. $total+=($suma / $conteo);

en un array para que pueda, sencillamente usar:
Código PHP:
Ver original
  1. $ultimo = end($total);

y dejar un solo único valor dentro de mi 'while'?

La opción de GatorV la he probado varias veces pero solo consigo el mismo resultado ...

Gracias por tu respuesta geq!
__________________
Andrew :P
  #16 (permalink)  
Antiguo 23/08/2010, 08:19
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: tomar el último valor de array

Hola, pasa que aunque lo hagas con un array, usar end (que no hace exactamente lo que creo que pensás) ni nada parecido te serviría ya que el array no se habría completado hasta llegar al último elemento. No importa cómo lo hagas, dentro del while siempre tendrás resultados parciales. Lo que yo proponía era algo así:

Código PHP:
//no modificar esto
$consulta "SELECT tipo, sum(valor), COUNT(unidades) FROM miTabla GROUP BY tipo;";
$resultado mysql_query($consulta) or die (mysql_error());
$total 0;
while (
$col mysql_fetch_array($resultadoMYSQL_NUM)) {
              
$suma $col[1];
              
$conteo $col[2];
 
              
$total+=($suma $conteo);
}

//realizar tu proceso a partir de aquí:
$consulta "SELECT tipo, sum(valor), COUNT(unidades) FROM miTabla GROUP BY tipo;";//o la consulta que fuera necesaria
$resultado mysql_query($consulta) or die (mysql_error());
while (
$col mysql_fetch_array($resultadoMYSQL_NUM)) {
              
///aquí $total vale 210 siempre

Saludos
  #17 (permalink)  
Antiguo 23/08/2010, 08:46
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
De acuerdo Respuesta: tomar el último valor de array

Hmmmm!.... OK!.... ... Pensaba que debía hacer una segunda consulta sin los parámetros de la primera (sin el WHERE, GROUP, etc)... Incluso trabajé el 'DIV' en mysql que no había usado nunca !

Claro... ahora entiendo lo que me dices y en efecto esto funciona sin problemas fuera del 'while' como inicialmente mostraba. Lo único, de acuerdo a lo leído, es que debo tener cuidado con los 'while' que voy dejando por el camino que en algún momento pueden ser 'liantes' en un código muy largo.

Muchísimas gracias por la aclaración y por tu paciencia!

Saludos!

POST RESUELTO
__________________
Andrew :P
  #18 (permalink)  
Antiguo 23/08/2010, 12:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: tomar el último valor de array

No es necesario hacer dos consultas:
Código PHP:
Ver original
  1. $consulta = "SELECT tipo, sum(valor), COUNT(unidades) FROM miTabla GROUP BY tipo;";
  2. $resultado = mysql_query($consulta) or die (mysql_error());
  3. $total = array();
  4. while ($col = mysql_fetch_array($resultado, MYSQL_NUM)) {
  5.           $suma = $col[1];
  6.           $conteo = $col[2];
  7.  
  8.           $thisTotal = ($suma / $conteo);
  9.           echo $thisTotal . "<br />";
  10.           $total[] = $thisTotal;
  11. }
  12. echo array_sum($total);

Saludos.
  #19 (permalink)  
Antiguo 24/08/2010, 01:13
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
De acuerdo Respuesta: tomar el último valor de array

Gracias GatorV... Muy útil respuesta!...
__________________
Andrew :P

Etiquetas: tomar
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 22:48.