在PHP中基于字符串生成范围内的固定随机数

在PHP中基于字符串生成范围内的固定随机数,php,Php,我需要根据一个字符串生成一个随机数或散列,每次都相同。使用函数crc32很容易做到这一点,但是,我需要它是一个范围之间的整数,因为随机数将从数组中拾取一个项目 以下是我目前掌握的代码: $min=0; $max=count($myarray); $number = crc32("Joe Jones"); $rnd = '.'.(string)$number; //(Int((max-min+1)*Rnd+min)) $rand = round(($max-$min+1)*$rnd+$min);

我需要根据一个字符串生成一个随机数或散列,每次都相同。使用函数crc32很容易做到这一点,但是,我需要它是一个范围之间的整数,因为随机数将从数组中拾取一个项目

以下是我目前掌握的代码:

$min=0;
$max=count($myarray);
$number = crc32("Joe Jones");

$rnd = '.'.(string)$number;
//(Int((max-min+1)*Rnd+min))
$rand = round(($max-$min+1)*$rnd+$min);

echo $rand;

这似乎有效,但它总是选择较低的数字。它从不选择更高的数字

您的
crc32
函数正在生成一个负数。将行更改如下:

$number = abs(crc32("Joe Jones"));
这将把负数转换成正数。此外,如果您的数组计数为低,则可能需要考虑乘以该数字。这取决于你自己。

只需使用(%)
$x%$n
将确保任何
$x
的输出介于
0
$n-1
之间

$myArray=range(1,1000);
$max=count($myArray); //1000
$number = crc32("Joe Jones"); //2559948711
$rand=$number % $max; //711

还有一个关于crc32的注意事项:如果您在32位平台上运行它,它可能会返回一个负数,因此您可以选择执行
abs(crc32($input))

循环100次并发布逗号分隔的结果。“随机”和“每次相同”听起来有点奇怪。它在64位平台上为我返回了一个负数。我知道有一个函数可以简化这个过程。谢谢