为什么PHP这样选择随机值?

时间:2018-12-22 03:59:28

标签: php arrays random undefined-behavior

所以...我正在测试某些东西,并注意到在运行此代码时:

$arr = str_split("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", 1);
print_r(implode(array_rand(array_flip($arr), 16)));

输出为

Refresh 1: BDFIJKPTVkl12789
Refresh 2: HIJKMQWYdfmorsw3
Refresh 3: FGHMNRVYfhknouw5
Refresh 4: AFIJKRSVeiuwx579
Refresh 5: DJORYZcgijlpqry1
Refresh 6: EISWbhjmoqr45689
Refresh 7: CDEFOTXdhkloqr27
Refresh 8: AEFIKLNORSknx349
Refresh 9: DEFHJMTVZcgpstz0
Refresh 10: CLQTZbefhnpq1279
  

为什么每次输出都以1到5个大写字母开头?   对我来说,那种“随机性”似乎很奇怪。

我想知道为什么会得到这个结果。

1 个答案:

答案 0 :(得分:13)

array_rand(自PHP 5.2.10起)不再改组它生成的随机键列表(您会注意到输出字符串全部按字母顺序排列,即字符与它们的顺序相同)在输入字符串中)。如果您不希望这种行为,请改用shufflearray_slice

$arr = str_split("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", 1);
shuffle($arr);
echo implode('', array_slice($arr, 0, 16));

输出:

dU54f9wBjZbAKgCP

Demo on 3v4l.org