Eu tenho uma matriz chamada $ran = array(1,2,3,4);
Preciso obter um valor aleatório dessa matriz e armazená-lo em uma variável. Como posso fazer isso?
Você também pode fazer exatamente:
$k = array_rand($array);
$v = $array[$k];
Esta é a maneira de fazer isso quando você tem uma matriz associativa.
array_rand
não é tão aleatório como deveria serarray_rand_value
array_rand()
usa o gerador Mersenne Twister: rand () com alias para mt_rand () e srand () com alias para mt_srand () . Na prática, agora deve ser bom o suficiente.O PHP fornece uma função exatamente para isso: array_rand ()
http://php.net/manual/en/function.array-rand.php
fonte
array_rand
função é,1
portanto, não é necessário escrevê-lo.Você pode usar mt_rand ()
Isso também é útil como uma função se você precisar do valor
fonte
array_rand
não é tão aleatório como deveria ser, por isso,mt_rand
é o preferidoisset
parte? Isso falharia para matrizes associativas de qualquer maneira.mt_rand
em vez derand
, neste caso, parece preferir alguns itens mais do que os outrosfonte
Você pode usar a função array_rand para selecionar uma chave aleatória da sua matriz como abaixo.
ou você pode usar as funções rand e count para selecionar um índice aleatório.
fonte
Derivado do Laravel
Collection::random()
:Uso:
Algumas notas:
$amount
tem que ser menor ou igual acount($array)
.array_rand()
não embaralha as teclas (desde o PHP 5.2.10, consulte 48224 ); portanto, os itens escolhidos sempre estarão na ordem original. Useshuffle()
depois, se necessário.Documentação:
array_rand()
,shuffle()
edit: A função Laravel cresceu visivelmente desde então, veja Laravel 5.4's
Arr::random()
. Aqui está algo mais elaborado, derivado da função Laravel adulta:Alguns destaques:
array_random($array, 1)
retorna uma matriz de um item ( # 19826 )fonte
A
array_rand
função parece ter uma distribuição desigual em matrizes grandes, nem todos os itens da matriz têm a mesma probabilidade de serem selecionados. Usar o shuffle na matriz e, em seguida, pegar o primeiro elemento não tem esse problema:fonte
mt_rand()
provavelmente são mais adequadas para a tarefa.Outra abordagem através da inversão da matriz para obter valor direto.
Snippet
array_rand
chave de retorno não valor. Então, estamos lançando valor como chave.Nota: A chave PHP sempre é uma chave exclusiva; portanto, quando a matriz é invertida, o valor duplicado como uma chave será substituído.
fonte
$array[array_rand($array)];
?array_flip
remova o duplicado como chave e dê o resultado ... Significa que não há duplicado!ou, para matrizes especificamente:
fonte
No meu caso, eu tenho que obter 2 valores o que são objetos. Eu compartilho esta solução simples.
fonte
Sua seleção tem implicações de segurança? Se sim, use
random_int()
earray_keys()
. (random_bytes()
é apenas PHP 7, mas existe um polyfill para o PHP 5 ).Uso:
Demonstração: https://3v4l.org/1joB1
fonte
Use rand () para obter um número aleatório para repetir uma tecla aleatória. Ex: 0 - 3
fonte
Uma linha:
$ran[rand(0, count($ran) - 1)]
fonte
Eu precisava de uma versão de linha para uma matriz curta:
ou se o array for fixo:
fonte
On-liner:
fonte
Isso funcionará bem com matrizes em linha. Além disso, acho que as coisas são mais arrumadas e reutilizáveis quando envolvidas em uma função.
Uso:
No PHP <7.1.0,
array_rand()
usarand()
, então você não gostaria dessa função para nada relacionado à segurança ou criptografia. No PHP 7.1.0+, use esta função sem preocupações, poisrand()
foi aliasada amt_rand()
.fonte
Estou baseando minha resposta na função do @ ÓlafurWaage. Tentei usá-lo, mas estava com problemas de referência quando tentava modificar o objeto de retorno. Atualizei sua função para passar e retornar por referência. A nova função é:
Para obter mais contexto, consulte minha pergunta em Passagem / retorno de referências ao objeto + alteração do objeto não está funcionando
fonte
Uma maneira simples de obter o valor Randdom do formulário Array .
agora toda vez que você obter cores diferentes da matriz .
fonte
Você obtém um número aleatório de uma matriz da seguinte maneira:
fonte