valor una tabla sacar repetir rango numeros numero lista generar entre decimales con como aleatorios aleatorio php arrays random

php - tabla - Cómo obtener valor aleatorio de una matriz



numero aleatorio excel (12)

Tengo una matriz llamada $ran = array(1,2,3,4);

Necesito obtener un valor aleatorio de este conjunto y almacenarlo en una variable, ¿cómo puedo hacer esto?


¿Su selección tiene alguna implicación de seguridad? Si es así, use random_int() y array_keys() . ( random_bytes() es solo PHP 7, pero hay un polyfill para PHP 5 ).

function random_index(array $source) { $max = count($source) - 1; $r = random_int(0, $max); $k = array_keys($source); return $k[$r]; }

Uso:

$array = [ ''apple'' => 1234, ''boy'' => 2345, ''cat'' => 3456, ''dog'' => 4567, ''echo'' => 5678, ''fortune'' => 6789 ]; $i = random_index($array); var_dump([$i, $array[$i]]);

Demostración: https://3v4l.org/1joB1


Derivado de Laravel Collection::random() :

function array_random($array, $amount = 1) { $keys = array_rand($array, $amount); if ($amount == 1) { return $array[$keys]; } $results = []; foreach ($keys as $key) { $results[] = $array[$key]; } return $results; }

Uso:

$items = [''foo'', ''bar'', ''baz'', ''lorem''=>''ipsum'']; array_random($items); // ''bar'' array_random($items, 2); // [''foo'', ''ipsum'']

Algunas notas:

  • $amount tiene que ser menor o igual que count($array) .
  • array_rand() no mezcla las claves (desde PHP 5.2.10, consulte 48224 ), por lo que sus elementos seleccionados siempre estarán en el orden original. Use shuffle() luego si es necesario.


Documentación: array_rand() , shuffle()


editar: La función de Laravel ha crecido notablemente desde entonces, ver Arr::random() Laravel 5.4 Arr::random() . Aquí hay algo más elaborado, derivado de la función de Laravel adulta:

function array_random($array, $number = null) { $requested = ($number === null) ? 1 : $number; $count = count($array); if ($requested > $count) { throw new /RangeException( "You requested {$requested} items, but there are only {$count} items available." ); } if ($number === null) { return $array[array_rand($array)]; } if ((int) $number === 0) { return []; } $keys = (array) array_rand($array, $number); $results = []; foreach ($keys as $key) { $results[] = $array[$key]; } return $results; }

Algunos aspectos destacados:

  • Lanzar una excepción si no hay suficientes elementos disponibles
  • array_random($array, 1) devuelve una matriz de un elemento ( #19826 )
  • Valor de soporte "0" para la cantidad de elementos ( #20439 )

Estoy basando mi respuesta en la función de @ ÓlafurWaage. Intenté usarlo pero me encontré con problemas de referencia cuando intenté modificar el objeto de devolución. Actualicé su función para pasar y regresar por referencia. La nueva función es:

function &random_value(&$array, $default=null) { $k = mt_rand(0, count($array) - 1); if (isset($array[$k])) { return $array[$k]; } else { return $default; } }

Para obtener más contexto, vea mi pregunta en Pasando / Volviendo referencias a objeto + cambio de objeto no funciona


La función array_rand parece tener una distribución desigual en matrices grandes, no todos los elementos de la matriz tienen la misma probabilidad de ser seleccionados. Usar el orden shuffle en la matriz y luego tomar el primer elemento no tiene este problema:

$myArray = array(1, 2, 3, 4, 5); // Random shuffle shuffle($myArray); // First element is random now $randomValue = $myArray[0];


Obtienes un número aleatorio de una matriz de la siguiente manera:

$randomValue = array_rand($rand,1);


PHP proporciona una función solo para eso: array_rand ()
array_rand()

$ran = array(1,2,3,4); $randomElement = $ran[array_rand($ran, 1)];


Puede usar la función array_rand para seleccionar una clave aleatoria de su matriz como se muestra a continuación.

$array = array("one", "two", "three", "four", "five", "six"); echo $array[array_rand($array, 1)];

o puede usar las funciones rand y count para seleccionar un índice aleatorio.

$array = array("one", "two", "three", "four", "five", "six"); echo $array[rand(0, count($array) - 1)];


Puedes usar mt_rand()

$random = $ran[mt_rand(0, count($ran) - 1)];

Esto también es útil como una función si necesita el valor

function random_value($array, $default=null) { $k = mt_rand(0, count($array) - 1); return isset($array[$k])? $array[$k]: $default; }


También puedes hacer lo siguiente:

$k = array_rand($array); $v = $array[$k];

Esta es la forma de hacerlo cuando tienes una matriz asociativa.


Use rand () para obtener un número aleatorio para repetir la clave aleatoria. En ex: 0 - 3

$ran = array(1,2,3,4); echo $ran[rand(0,3)];


$rand = rand(1,4);

o, para matrices específicamente:

$array = array(''a value'', ''another value'', ''just some value'', ''not some value''); $rand = $array[ rand(0, count($array)-1) ];


$value = $array[array_rand($array)];