J'ai besoin de générer des nombres uniques aléatoires dans une certaine plage, comment puis-je faire cela ? Je peux générer des nombres aléatoires par
generator: $arr = []; $x = rand($min, $max); $len = count($arr); $flag = 0; for($i = 0; $i < $len; $i++) { if ($flag === 1) goto generator; if ($x === $arr[$i]) $flag = 1; } $arr[$index] = $x; $index++; goto generator;
Je sais que ce code est terrible, je dois donc améliorer le code de ma version ! aide!
Exemple : Si je dois générer 3 nombres entre 1 et 15, ils devraient être comme 5, 9, 1, mais pas 3, 1, 2 [en 1 - 3 (les nombres que je veux générer)]
J'aimerais savoir en quoi la réponse acceptée diffère de ma réponse. Il est à noter qu'un mélange des deux peut être avantageux ; en effet, voici une fonction qui utilise conditionnellement l'un ou l'autre en fonction de certaines valeurs :
Résultat :
La réponse acceptée est définitivement optimale si vous utilisez une plage plus petite et un nombre plus élevé de valeurs de retour ; cependant, comme je m'y attendais, des plages plus grandes et des comptes plus petits prendront plus de temps. Pour arriver à la réponse acceptée, elle doit stocker toutes les valeurs possibles dans le gamme. Vous courez même le risque de dépasser la limite de mémoire de PHP. Évaluer le rapport entre la portée et le nombre et choisir conditionnellement un hybride de générateurs serait le meilleur des deux mondes.
Tableau avec des plages de nombres dans un ordre aléatoire :
Fonction d'emballage :
Exemple :
Résultat :