tengo una matriz llamada $ran = array(1,2,3,4);
Como llegar valor aleatorio de una matriz
que necesito para obtener un valor aleatorio de esta matriz y almacenarlo en una variable, ¿cómo puedo hacer esto?
tengo una matriz llamada $ran = array(1,2,3,4);
Como llegar valor aleatorio de una matriz
que necesito para obtener un valor aleatorio de esta matriz y almacenarlo en una variable, ¿cómo puedo hacer esto?
También se puede hacer simplemente:
$k = array_rand($array);
$v = $array[$k];
Este es la forma de hacerlo cuando tienes una matriz asociativa.
Puede utilizar mt_rand()
$random = $ran[mt_rand(0, count($ran) - 1)];
Esto viene muy bien como una función, así si necesita el valor
function random_value($array, $default=null)
{
$k = mt_rand(0, count($array) - 1);
return isset($array[$k])? $array[$k]: $default;
}
Debe ser mt_rand (0, 3) ya que solo hay 4 elementos. Más correctamente sin embargo: $ array [mt_rand (0, count ($ array)] –
Err, creo que quiso decir mt_rand (0, count ($ ran) - 1) –
Sí lo hice, buena captura.: P –
$rand = rand(1,4);
o, para las matrices en concreto:
$array = array('a value', 'another value', 'just some value', 'not some value');
$rand = $array[ rand(0, count($array)-1) ];
Nunca se obtendría el primer elemento en esta lista y se saldría de la matriz con 4 –
El primer $ rand se trata de valores. El conjunto original tiene valores que van del 1 al 4. El segundo $ rand se trata de las teclas de matriz, de 0 a 3. –
obtienes un n aleatorio úmero de una matriz como sigue:
$randomValue = array_rand($rand,1);
array_rand() devuelve una clave aleatoria, no un valor aleatorio. –
PHP proporciona una función sólo por eso: array_rand()
http://php.net/manual/en/function.array-rand.php
$ran = array(1,2,3,4);
$randomElement = $ran[array_rand($ran, 1)];
El valor predeterminado del segundo argumento de la función 'array_rand' es' 1', por lo que no es necesario escribirlo. –
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 utilizar el rand y el recuento de funciones para seleccionar un índice aleatorio.
$array = array("one", "two", "three", "four", "five", "six");
echo $array[rand(0, count($array) - 1)];
La función array_rand
parece tener una distribución desigual en grandes series, no cada elemento de la matriz es la misma probabilidad de ser recogido. Usando shuffle en la matriz y luego tomando 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];
$value = $array[array_rand($array)];
Estoy basando mi respuesta fuera de 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, véase mi pregunta sobre al Passing/Returning references to object + changing object is not working
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']
Unas pocas notas :
$amount
tiene que ser menor que o igual a count($array)
.array_rand()
no baraja las teclas (desde PHP 5.2.10, consulte 48224), por lo que sus elementos seleccionados siempre estarán en el orden original. Use shuffle()
después si es necesario.
Documentación: array_rand()
, shuffle()
edición: La función laravel ha crecido notablemente desde entonces, ver laravel 5.4 de Arr::random()
. Aquí es algo más elaborado, derivada de la función 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:
¿Tiene su selección alguna implicancia de seguridad? Si es así, use random_int()
y array_keys()
. (random_bytes()
es solo PHP 7, pero hay un polyfill for 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
Otra alternativa con pura MySQL:
$result = mysql_query("select group_id from menu_groups
group by group_id
order by rand()
limit 1");
$rand_group= mysql_fetch_row($result);
$rand_group_id= $rand_group['group_id'];
Creo que malinterpretaste la pregunta. Pide un elemento aleatorio de la matriz php, no el registro de la base de datos. – zennin
Uso rand() para obtener números aleatorios para hacerse eco clave aleatoria. En ex: 0 - 3
$ran = array(1,2,3,4);
echo $ran[rand(0,3)];
según este [comentario] (http://www.php.net/manual/en/function.array-rand.php#105265) 'array_rand' no es tan aleatorio como debería ser –
O puede requerir [este paquete] (https://github.com/freekmurze/array-functions) y use 'array_rand_value' – murze
Desde PHP 7.1, [' array_rand() '] (http://php.net/manual/en/function.array -rand.php) utiliza el generador Mersenne Twister: [rand() con alias a mt_rand() y srand() con alias a mt_srand()] (http://php.net/manual/en/migration71.incompatible.php#migration71 .incompatible.rand-srand-aliases). En la práctica, ahora debería ser lo suficientemente bueno. –