Foros del Web » Programando para Internet » PHP »

Descartar los dos resultados más bajos

Estas en el tema de Descartar los dos resultados más bajos en el foro de PHP en Foros del Web. Hola a todos. Tengo que sacar un listado que muestra una lista de concursantes y sus clasificaciones. El problema que tengo es que son 8 ...
  #1 (permalink)  
Antiguo 17/05/2012, 06:05
 
Fecha de Ingreso: mayo-2012
Mensajes: 11
Antigüedad: 11 años, 11 meses
Puntos: 0
Descartar los dos resultados más bajos

Hola a todos.

Tengo que sacar un listado que muestra una lista de concursantes y sus clasificaciones. El problema que tengo es que son 8 puntuaciones por concursante, y para sacar el total de puntos por concursante, debo quitar a cada concursante los dos peores resultados (De los 8 se descartan los 2 peores).

Tal como lo tengo ahora:
concursante c1 -c2- c3- c4- c5- c6- c7- c8- Total Puntos
Pedro R. 10 -9---3---12--20-15--16--4..... 89
Juan P. 1-10---3---4--18--20--25...7..... 88
...

Lo que quiero obtener:

concursante c1 -c2- c3- c4- c5- c6- c7- c8- Total Puntos
Pedro R..... 10 ..9...--..12..20..15..16..--.......82
Juan P......... - .10..--...4..18..20...25...7...... 84


¿Me pueden dar alguna pista por favor de cómo conseguirlo?

Muchas gracias.
  #2 (permalink)  
Antiguo 17/05/2012, 06:45
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Descartar los dos resultados más bajos

Podrías usar esta función:

Código PHP:
Ver original
  1. function quitar_valor_mas_bajo(&$_ar){
  2.     if(!is_array($_ar))
  3.         return false;
  4.    
  5.     $i_valor = 0;
  6.     for($i=0; $i<(count($_ar)-1); $i++){
  7.         if($_ar[$i] < $_ar[$i_valor]){
  8.             $i_valor = $i;
  9.             echo $i_valor;
  10.         }
  11.     }
  12.    
  13.     unset($_ar[$i_valor]);
  14.     $_ar = array_values($_ar);
  15.     return $i_valor;
  16. }

Y llamarla dos veces. OJO, al pasar el parámetro por referencia, esta función es destructiva! Te va a modificar el array que pases por parámetro.

Ejemplo:
Código PHP:
Ver original
  1. <?php
  2.     $ar_valores = array(1,3,4,12);
  3.  
  4.     quitar_valor_mas_bajo($ar_valores);
  5.     quitar_valor_mas_bajo($ar_valores);
  6.  
  7.     var_dump($ar_valores);
  8.  
  9.    
  10.    
  11.     function quitar_valor_mas_bajo(&$_ar){
  12.         if(!is_array($_ar))
  13.             return false;
  14.        
  15.         $i_valor = 0;
  16.         for($i=0; $i<(count($_ar)-1); $i++){
  17.             if($_ar[$i] < $_ar[$i_valor]){
  18.                 $i_valor = $i;
  19.                 echo $i_valor;
  20.             }
  21.         }
  22.        
  23.         unset($_ar[$i_valor]);
  24.         $_ar = array_values($_ar);
  25.         return $i_valor;
  26.     }
  27. ?>
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 17/05/2012, 09:29
 
Fecha de Ingreso: mayo-2012
Mensajes: 11
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Descartar los dos resultados más bajos

Gracias por tu rápida respuesta Naahuel.

Tengo algunas dudas.

No tengo los datos en un array sino en una tabla mysql.


Luego, de esos 8 resultados los hay con valor cero, que corresponden a las fechas que aún están por llegar y están con valor valor cero. Las de valor cero no debería tenerlas en cuenta a la hora de buscar los dos valores más bajos.
  #4 (permalink)  
Antiguo 17/05/2012, 09:36
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Descartar los dos resultados más bajos

Cita:
Iniciado por fgbalmes Ver Mensaje
No tengo los datos en un array sino en una tabla mysql.
Código PHP:
Ver original
  1. $query = "SELECT bla bla bla";
  2. $resultado = mysql_query($query) or die ("Error.");
  3.  
  4. $resultado_array = array();
  5. while($row = mysql_fetch_assoc($resultado))
  6. {
  7.     $resultado_array[] = $row;
  8. }

Cita:
Iniciado por fgbalmes Ver Mensaje
Luego, de esos 8 resultados los hay con valor cero, que corresponden a las fechas que aún están por llegar y están con valor valor cero. Las de valor cero no debería tenerlas en cuenta a la hora de buscar los dos valores más bajos.
Agregá una condición a la función, que si el valor es cero que no haga nada.
Código PHP:
Ver original
  1. function quitar_valor_mas_bajo(&$_ar){
  2.     if(!is_array($_ar))
  3.         return false;
  4.    
  5.     $i_valor = 0;
  6.     for($i=0; $i<(count($_ar)-1); $i++){
  7.         if(($_ar[$i] < $_ar[$i_valor]) && ($_ar[$i]!=0)){
  8.             $i_valor = $i;
  9.             echo $i_valor;
  10.         }
  11.     }
  12.    
  13.     unset($_ar[$i_valor]);
  14.     $_ar = array_values($_ar);
  15.     return $i_valor;
  16. }

No lo probé, pero debería funcionar. Acá tenés otro asunto que es el tipo de datos que obtenés de la base de datos. Hacé las pruebas y fijate si no hay conflictos de mezclas de cadenas con enteros, o algo así.
__________________
nahueljose.com.ar
  #5 (permalink)  
Antiguo 21/05/2012, 15:01
 
Fecha de Ingreso: mayo-2012
Mensajes: 11
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Descartar los dos resultados más bajos

Gracias Naahuel.
Voy a probarlo.
  #6 (permalink)  
Antiguo 19/06/2012, 10:45
 
Fecha de Ingreso: mayo-2012
Mensajes: 11
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Descartar los dos resultados más bajos

Funcionó Naahuel. Gracias a ti a otras ayudas que he recibido.

No sé si hay que poner el código o dar más información en estos casos.
Gracias por vuestra colaboración.

Etiquetas: resultados
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 01:24.