Il semble que vous souhaitiez renvoyer un nombre aléatoire compris entre 1 et 1000 avec une clé de chaîne, mais vous souhaitez renvoyer le même "nombre aléatoire" chaque fois que vous obtenez la même clé de chaîne.
Ma solution intuitive était de hacher votre entrée et retourner un int basé sur cela. Cependant, une bien meilleure solution consiste à mettre en cache vos générations:
$cache = array();
function text_to_number($text, $min, $max)
{
if (!isset($cache[$text]))
$cache[$text] = array();
if (!isset($cache[$text][$min])
$cache[$text][$min] = array();
if (!isset($cache[$text][$min][$max])
$cache[$text][$min][$max] = mt_rand($min, $max);
return $cache[$text][$min][$max];
}
$text1 = "text1";
$text2 = "text2";
$rand1 = text_to_number($text1, 1, 1000);
$rand2 = text_to_number($text2, 1, 1000);
assertEqual($rand1, text_to_number($text1, 1, 1000)); //PSEUDOCODE assert
Modifier: Mise à jour, vous souhaitez mettre en cache par min/max aussi.
Si le résultat est déterministe, comment est-ce un nombre aléatoire? –
'mt_rand (1, 1001)' devrait renvoyer un nombre différent pour "text1" que 'mt_rand (1, 1000)' – Qiao
@Qiao Donc votre vraie question semble être comment pouvez-vous graver le RNG en utilisant du texte? –