Entradas con tag ‘aleatorio’

En el capítulo anterior, el blogoamigo Shakaran aconsejó (Gracias!) usar mt_rand(); en lugar de rand();, función que no conocía y al parecer su uso al generar números aleatorios es más recomendable, lo cual fue cierto hasta la nueva implementación de rand();, la cual es más rápida que la mismísima mt_rand();, pero como las palabras se las lleva el viento y teniendo un área de Pruebas (a.k.a. Ejemplos) acá están las evidencias:

Código

<?php
//Función a llamar varias veces
function generarAleatorios($veces=100000)
{
  echo "<h2 style=\"margin-top:20px;\">Se generaron {$veces} (x 2) números aleatorios</h2>";
  $tiempoInicial = microtime(true);
  $i = 0;
  while($i < $veces)
  {
    rand();
    $i++;
  }
  $tiempoFinal = microtime(true);
  $tiempoTotal = $tiempoFinal - $tiempoInicial;
  echo "Fueron <strong>{$tiempoTotal}</strong> segundos usando <strong>rand();</strong><br/>";
 
  $tiempoInicial = microtime(true);
  $i = 0;
  while($i < $veces)
  {
    mt_rand();
    $i++;
  }
  $tiempoFinal = microtime(true);
  $tiempoTotalMt = $tiempoFinal - $tiempoInicial;
  echo "Fueron <strong>{$tiempoTotalMt}</strong> segundos usando <strong>mt_rand();</strong><br/><br/>";
 
  if($tiempoTotal < $tiempoTotalMt)
  {
    $diferencia = $tiempoTotalMt - $tiempoTotal;
    echo "<strong style=\"color:green;\">rand();</strong> fue más rápido por <strong>{$diferencia}</strong> segundos.<br />";
  }
  else if($tiempoTotal > $tiempoTotalMt)
  {
    $direrencia = $tiempoTotal - $tiempoTotalMt;
    echo "<strong style=\"color:red;\">mt_rand();</strong> fue más rápido por <strong>{$diferencia}</strong> segundos.<br />";
  }
  else
  {
    echo "<strong>rand();</strong> y <strong>mt_rand();</strong>, tomaron exactamente el mismo tiempo <strong>{$tiempoTotal}</strong> segundos, increíble!!.<br />";
  }
}
 
//Todo listo!!
//Primero con nuestros 3 números para los colores a ver como van con tan poquitos
generarAleatorios(3);
//Otros números más redondos
generarAleatorios(10000);
generarAleatorios(1000000);
?>

Ejemplo

Puedes ver el código funcionando aquí, así que ahora puedes usar rand(); sin perder anhelados micro-segundos ;)

Referencias

Techno.Dev

De las cosas que me encantan del tema actual de este blog, es que en cada impresión de página el fondo cambia de color aleatoriamente, el código es muy sencillo y algo sucio:

Código

Hay varias formas de hacerlo, pero te mostraré 3:

  1. Color en formato HTML

    <?php
    //Obtenemos los canales rojo, verde y azul aleatoriamente
    $r = rand(0,255);
    $g = rand(0,255);
    $b = rand(0,255);
    //Los convertimos a hexadecimal
    $rh = dechex($r);
    $gh = dechex($g);
    $bh = dechex($b);
     
    //Generamos el color
    $color=($r>15 ? $rh : '0'.$rh ).($g>15 ? $gh : '0'.$gh ).($b>15 ? $bh : '0'.$bh );
    /*
    Lo agregamos al documento en un elemento style
    también podrías agregarlo mediante la propiedad style del elemento body
    */
    echo '<style>body{ background-color:#'.$color.' !important; }</style>';
    /*
    Como notarás se hacen comprobaciones para que en caso de que algún canal generado
    sea menor igual a <strong>F</strong> (15 en decimal) se le agregue un <strong>0</strong> (cero)
    a la izquierda para que el color quede bien formado y sea válido.
    */
    ?>
  2. Color usando rgb de CSS

    <?php
    //Obtenemos los canales rojo, verde y azul aleatoriamente
    $r = rand(0,255);
    $g = rand(0,255);
    $b = rand(0,255);
    /*
    Podríamos saltarnos las 3 sentencias anteriores y colocarlo directamente, pero lo hago por legibilidad
     
    Lo agregamos al documento en un elemento style
    también podrías agregarlo mediante la propiedad style del elemento body
    */
    echo '<style>body{ background-color:rgb('.$r.', '.$g.', '.$b.') !important; }</style>';
    ?>
  3. Color usando porcentajes y rgb de CSS

    <?php
    //Obtenemos los porcentajes para los canales rojo, verde y azul aleatoriamente
    $r = rand(0,100);
    $g = rand(0,100);
    $b = rand(0,100);
    /*
    Podríamos saltarnos las 3 sentencias anteriores y colocarlo directamente, pero lo hago por legibilidad
     
    Lo agregamos al documento en un elemento style
    también podrías agregarlo mediante la propiedad style del elemento body
    */
    echo '<style>body{ background-color:rgb('.$r.'%, '.$g.'%, '.$b.'%) !important; }</style>';
    ?>

Ejemplo

Aprovecho esta entrada tan sencilla para inaugurar un nueva sección llamada Ejemplos, puedes ver el ejemplo de esta entrada aquí.