Eh bien, vous n'avez pas clarifié toutes les questions que j'ai posées dans mon commentaire, mais je vais supposer que vous voulez une fonction qui peut prendre une chaîne de caractères "possibles" et une longueur de chaîne à retourner. J'ai commenté en détail comme demandé, en utilisant plus de variables que je le ferais normalement, pour plus de clarté :
function get_random_string($valid_chars, $length)
{
// start with an empty random string
$random_string = "";
// count the number of chars in the valid chars string so we know how many choices we have
$num_valid_chars = strlen($valid_chars);
// repeat the steps until we've created a string of the right length
for ($i = 0; $i < $length; $i++)
{
// pick a random number from 1 up to the number of valid chars
$random_pick = mt_rand(1, $num_valid_chars);
// take the random character out of the string of valid chars
// subtract 1 from $random_pick because strings are indexed starting at 0, and we started picking at 1
$random_char = $valid_chars[$random_pick-1];
// add the randomly-chosen char onto the end of our string so far
$random_string .= $random_char;
}
// return our finished random string
return $random_string;
}
Pour appeler cette fonction avec les données de votre exemple, vous l'appelleriez de la manière suivante :
$original_string = 'abcdefghi';
$random_string = get_random_string($original_string, 6);
Notez que cette fonction ne vérifie pas l'unicité des caractères valides qui lui sont transmis. Par exemple, si vous l'avez appelée avec une chaîne de caractères valide de 'AAAB'
il serait trois fois plus susceptible de choisir un A pour chaque lettre qu'un B. Cela pourrait être considéré comme un bogue ou une fonctionnalité, selon vos besoins.
0 votes
Je ne suis pas sûr de ce que vous voulez, exactement. La chaîne aléatoire doit contenir les lettres de la chaîne d'origine ? Peut-elle utiliser chaque caractère une seule fois ? Et si vous essayez de créer une chaîne aléatoire plus longue que l'originale ?
1 votes
S'agit-il d'une question de type "écrire mon code" ? Qu'est-ce que vous ne comprenez pas dans l'utilisation des nombres aléatoires et que nous pouvons vous aider à apprendre ? Il semble que votre algorithme soit plus spécifique que la simple génération d'une chaîne aléatoire de longueur x.
1 votes
Vérifiez : stackoverflow.com/questions/637278/
0 votes
@DForck42 - parce que ce n'est pas si aléatoire après tout. Comparez : générez une chaîne aléatoire de longueur 32 avec les symboles [0-9a-f] et faites par exemple md5(time()). Dans le second cas, je pourrais deviner cette chaîne "aléatoire" en quelques secondes (si je pouvais facilement vérifier si cette chaîne aléatoire est celle utilisée), alors qu'une chaîne vraiment aléatoire prendrait des siècles.
0 votes
Bonne question ! presque toutes les fonctions "chaîne aléatoire" ne produisent que des NOMBRES, pas des chaînes de caractères. jusqu'à aujourd'hui, je n'ai pas vu de fonction aléatoire de chaîne de caractères sur une seule ligne