Foros del Web » Programando para Internet » PHP »

Random con un porcentaje

Estas en el tema de Random con un porcentaje en el foro de PHP en Foros del Web. Hola a todos, tengo en mente hacer un script pero no se muy bien como hacerlo. La idea es la siguiente, en una base de ...
  #1 (permalink)  
Antiguo 16/10/2011, 14:39
Avatar de Jota_sk  
Fecha de Ingreso: octubre-2008
Mensajes: 188
Antigüedad: 15 años, 7 meses
Puntos: 0
Random con un porcentaje

Hola a todos, tengo en mente hacer un script pero no se muy bien como hacerlo.
La idea es la siguiente, en una base de datos MYSQL tengo una tabla que contiene lo siguientes datos: ID --> Identificador único del campo; Nombre --> Nombre del campo; Descripcion --> Descripcion del campo; Porcentaje --> Numero del porcentaje que queremos que salga este campo (por ejemplo 15%).

Lo que quiero hacer es un script que me muestre un campo aleatorio pero que tenga en cuenta el tanto porciento de que salga el valor. Por ejemplo que salga mas veces un campo con el porcentaje 63% que el porcentaje 9%. El problema que tengo es que no se como hacerlo ni por donde empezar
  #2 (permalink)  
Antiguo 17/10/2011, 03:47
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Random con un porcentaje

Hola Jota, no se entiende muy bien la pregunta pero me atrevo a proponerte una solución. Supongo que quieres generar números o porcentajes aleatorios pero respetando el valor de la db. Cambio de ejemplo.
Tenemos unos servidores y queremos balancear la carga aleatoriamente pero manteniendo cierto porcentaje. De esta manera, tenemos server1 15%, server2 50%, server3 20%, server4 15%. Queremos que la carga se distribuya aleatoriamente, pero que cada server reciba este porcentaje de carga sobre un total de 100 peticiones. Una solución sería:

Código PHP:
Ver original
  1. <?php
  2. #1. Un array con los porcentajes que quiero que reciba cada server donde server => porcentaje:
  3.  
  4. $balanceo = array(1 => 15, 2 => 50, 3 => 20, 4 => 15);
  5.  
  6. #2. Genero una ristra de 100 elementos que representan los porcentajes anteriores. Así, el 1 aparecerá 10 veces, el 2 50, etc...
  7.  
  8. $ristra = array();
  9.  
  10. foreach ($balanceo as $server => $porcentaje)
  11. {
  12.     for ($i = 0; $i < $porcentaje; $i++) {
  13.         $ristra[] = $server;
  14.     }
  15. }
  16. # Ahora $ristra contiene 10 veces 1, 50 veces 2, etc...
  17. print_r($ristra);
  18.  
  19. #. Cada vez que haga falta resolver una petición, elijo una posición aleatoria del array, este valor indica el server a donde debo balancear:
  20.  
  21. $max = 100;
  22. $min = 1;
  23.  
  24. $redirectTo = $ristra[rand($min, $max)];
  25.  
  26. //Así las posibilidades de caer en server uno son 10%, server 2 50%.
  27. echo "<h3>Redireccionando a $redirectTo</h3>";
  28. ?>

Te dejo el ejemplo, seguro que cualquier forero puede mejorarlo u orientarte mejor.
Salu2!
__________________
Fere libenter homines, id quod volunt, credunt.

Etiquetas: mysql, porcentaje, random, tabla
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 06:53.