Tengo una matriz llamada $ran = array(1,2,3,4);
Necesito obtener un valor aleatorio de esta matriz y almacenarlo en una variable, ¿cómo puedo hacer esto?
También puedes hacer solo:
$k = array_rand($array);
$v = $array[$k];
Esta es la forma de hacerlo cuando tienes una matriz asociativa.
array_rand
no es tan aleatorio como debería serarray_rand_value
array_rand()
utiliza el generador Mersenne Twister: rand () con alias mt_rand () y srand () con alias mt_srand () . En la práctica, ahora debería ser lo suficientemente bueno.PHP proporciona una función solo para eso: array_rand ()
http://php.net/manual/en/function.array-rand.php
fuente
array_rand
función es,1
por lo tanto, no es necesario escribirlo.Puedes usar mt_rand ()
Esto también es útil como una función si necesita el valor
fuente
array_rand
no es tan aleatorio como debería ser, por lo quemt_rand
es preferibleisset
parte? Esto fallaría para las matrices asociativas de todos modos.mt_rand
lugar derand
en este caso parece preferir algunos elementos más que otrosfuente
Puede usar la función array_rand para seleccionar una clave aleatoria de su matriz como se muestra a continuación.
o puede usar las funciones rand y count para seleccionar un índice aleatorio.
fuente
Derivado de Laravel
Collection::random()
:Uso:
Algunas notas
$amount
tiene que ser menor que o igual acount($array)
.array_rand()
no baraja claves (desde PHP 5.2.10, consulte 48224 ), por lo que sus elementos seleccionados siempre estarán en el orden original. Usarshuffle()
después si es necesario.Documentación:
array_rand()
,shuffle()
editar: La función Laravel ha crecido notablemente desde entonces, ver Laravel 5.4
Arr::random()
. Aquí hay algo más elaborado, derivado de la función adulta de Laravel:Algunos puntos destacados:
array_random($array, 1)
devuelve una matriz de un elemento ( # 19826 )fuente
La
array_rand
función parece tener una distribución desigual en matrices grandes, no todos los elementos de la matriz tienen la misma probabilidad de ser elegidos. Usar shuffle en la matriz y luego tomar el primer elemento no tiene este problema:fuente
mt_rand()
probablemente sean más adecuadas para la tarea.Otro enfoque a través de voltear la matriz para obtener un valor directo.
Retazo
array_rand
clave de retorno no valor. Entonces, estamos cambiando el valor como clave.Nota: la clave PHP siempre será una clave única, por lo que cuando se invierte la matriz, se sobrescribirá el valor duplicado como clave.
fuente
$array[array_rand($array)];
?array_flip
elimine el duplicado como clave y luego dé el resultado ... ¡Signifique que no hay duplicado!o, para matrices específicamente:
fuente
En mi caso, tengo que obtener 2 valores que son objetos. Comparto esta solución simple.
fuente
¿Su selección tiene alguna implicación de seguridad? Si es así, use
random_int()
yarray_keys()
. (random_bytes()
es solo PHP 7, pero hay un polyfill para PHP 5 ).Uso:
Demostración: https://3v4l.org/1joB1
fuente
Use rand () para obtener un número aleatorio para hacer eco de una clave aleatoria. En ex: 0 - 3
fuente
Una línea:
$ran[rand(0, count($ran) - 1)]
fuente
Necesitaba una versión de línea para una matriz corta:
o si la matriz es fija:
fuente
En línea:
fuente
Esto funcionará bien con matrices en línea. Además, creo que las cosas son más ordenadas y más reutilizables cuando se envuelve en una función.
Uso:
En PHP <7.1.0,
array_rand()
utilizarand()
, por lo que no querrá esta función para nada relacionado con la seguridad o la criptografía. En PHP 7.1.0+, use esta función sin preocupación ya querand()
se le ha asignado un aliasmt_rand()
.fuente
Estoy basando mi respuesta en la función de @ ÓlafurWaage. Traté de usarlo pero me encontré con problemas de referencia cuando intenté modificar el objeto devuelto. Actualicé su función para pasar y volver por referencia. La nueva función es:
Para más contexto, vea mi pregunta en Pasar / Devolver referencias a objeto + cambiar objeto no funciona
fuente
Una forma sencilla de obtener el valor Randdom de Array .
ahora cada vez obtendrás diferentes colores de Array .
fuente
Obtiene un número aleatorio de una matriz de la siguiente manera:
fuente