Jus*_*99b 8 php arrays random undefined-behavior
所以...我正在测试一些东西并注意到当我运行这段代码时:
$arr = str_split("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", 1);
print_r(implode(array_rand(array_flip($arr), 16)));
Run Code Online (Sandbox Code Playgroud)
输出是
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
Run Code Online (Sandbox Code Playgroud)
为什么输出每次都以1到5个大写字母开始?这种"随机性"对我来说似乎很奇怪.
我想知道为什么我得到这个结果.
Nic*_*ick 13
array_rand
(自PHP 5.2.10开始)不再对它生成的随机密钥列表进行随机排列(您会注意到输出字符串全部按字母顺序排列,即字符的顺序与输入字符串中的字符顺序相同).如果您不想要这种行为,请使用shuffle
而array_slice
不是:
$arr = str_split("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", 1);
shuffle($arr);
echo implode('', array_slice($arr, 0, 16));
Run Code Online (Sandbox Code Playgroud)
输出:
dU54f9wBjZbAKgCP
Run Code Online (Sandbox Code Playgroud)