J'ai un tableau appelé $ran = array(1,2,3,4);
J'ai besoin d'obtenir une valeur aléatoire de ce tableau et de la stocker dans une variable, comment puis-je faire cela?
Vous pouvez également faire simplement:
$k = array_rand($array);
$v = $array[$k];
C'est la manière de le faire lorsque vous avez un tableau associatif.
array_rand
n'est pas aussi aléatoire qu'il devrait l'êtrearray_rand_value
array_rand()
utilise le générateur Mersenne Twister: rand () alias mt_rand () et srand () alias mt_srand () . En pratique, cela devrait maintenant être assez bon.PHP fournit une fonction juste pour cela: array_rand ()
http://php.net/manual/en/function.array-rand.php
la source
array_rand
fonction est1
donc inutile de l'écrire.Vous pouvez utiliser mt_rand ()
Cela est également utile en tant que fonction si vous avez besoin de la valeur
la source
array_rand
ne sont pas aussi aléatoires qu'ils devraient l'être, ilmt_rand
est donc préférableisset
partie? Cela échouerait de toute façon pour les tableaux associatifs.mt_rand
au lieu derand
dans ce cas, il semble préférer certains éléments plus que les autresla source
Vous pouvez utiliser la fonction array_rand pour sélectionner une clé aléatoire dans votre tableau comme ci-dessous.
ou vous pouvez utiliser les fonctions rand et count pour sélectionner un index aléatoire.
la source
Dérivé de Laravel
Collection::random()
:Usage:
Quelques notes:
$amount
doit être inférieur ou égal àcount($array)
.array_rand()
ne mélange pas les clés (depuis PHP 5.2.10, voir 48224 ), donc vos éléments choisis seront toujours dans l'ordre d'origine. Utilisezshuffle()
ensuite si nécessaire.Documentation:
array_rand()
,shuffle()
edit: La fonction Laravel a sensiblement augmenté depuis lors, voir Laravel 5.4's
Arr::random()
. Voici quelque chose de plus élaboré, dérivé de la fonction Laravel adulte:Quelques points forts:
array_random($array, 1)
renvoie un tableau d'un élément ( # 19826 )la source
La
array_rand
fonction semble avoir une distribution inégale sur les grands tableaux, tous les éléments du tableau ne sont pas également susceptibles d'être sélectionnés. Utiliser shuffle sur le tableau puis prendre le premier élément ne pose pas ce problème:la source
mt_rand()
sont probablement mieux adaptées à la tâche.Une autre approche par retournement de tableau pour obtenir une valeur directe.
Fragment
array_rand
la clé de retour n'est pas la valeur. Donc, nous inversons la valeur comme clé.Remarque: la clé PHP est toujours une clé unique, donc lorsque le tableau est retourné, la valeur dupliquée en tant que clé sera écrasée.
la source
$array[array_rand($array)];
?array_flip
supprimez le double comme clé puis donnez le résultat ... Ne signifie pas de doublon!ou, pour les tableaux en particulier:
la source
Dans mon cas, je dois obtenir 2 valeurs qui sont des objets. Je partage cette solution simple.
la source
Votre sélection a-t-elle des implications sur la sécurité? Si tel est le cas, utilisez
random_int()
etarray_keys()
. (random_bytes()
est PHP 7 uniquement, mais il existe un polyfill pour PHP 5 ).Usage:
Démo: https://3v4l.org/1joB1
la source
Utilisez rand () pour obtenir un nombre aléatoire pour faire écho à la clé aléatoire. En ex: 0 - 3
la source
Une ligne:
$ran[rand(0, count($ran) - 1)]
la source
J'avais besoin d'une version en ligne pour un tableau court:
ou si le tableau est fixe:
la source
Sur doublure:
la source
Cela fonctionnera bien avec les tableaux en ligne. De plus, je pense que les choses sont plus ordonnées et plus réutilisables lorsqu'elles sont enveloppées dans une fonction.
Usage:
Sur PHP <7.1.0,
array_rand()
utiliserand()
, donc vous ne voudriez pas utiliser cette fonction pour tout ce qui concerne la sécurité ou la cryptographie. Sur PHP 7.1.0+, utilisez cette fonction sans souci car ellerand()
a reçu un aliasmt_rand()
.la source
Je fonde ma réponse sur la fonction de @ ÓlafurWaage. J'ai essayé de l'utiliser mais je rencontrais des problèmes de référence lorsque j'avais essayé de modifier l'objet de retour. J'ai mis à jour sa fonction pour passer et revenir par référence. La nouvelle fonction est:
Pour plus de contexte, voir ma question sur Passer / Renvoyer des références à l'objet + changer d'objet ne fonctionne pas
la source
Un moyen simple d'obtenir une valeur Randdom sous forme d'Array .
maintenant, à chaque fois, vous obtiendrez des couleurs différentes de Array .
la source
Vous obtenez un nombre aléatoire d'un tableau comme suit:
la source