我需要生成一个随机数或散列,每次基于字符串都是相同的。这很容易使用函数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;
它似乎有用,但它总是选择较低的数字。它永远不会选择更高的数字。
答案 0 :(得分:0)
只需使用mod(%)即可。对于任何$x % $n
,0
将确保$n-1
和$x
之间的输出。
$myArray=range(1,1000);
$max=count($myArray); //1000
$number = crc32("Joe Jones"); //2559948711
$rand=$number % $max; //711
还有一个关于crc32的说明:如果你在32位平台上运行它,可能会返回一个负数,所以你可以选择abs(crc32($input))
答案 1 :(得分:-2)
您的crc32
函数产生负数。按如下方式更改行:
$number = abs(crc32("Joe Jones"));
这将负数转为正数。此外,如果您的阵列数量很少,您可能需要考虑乘以该数字。这有多高取决于你。