Why is PHP selecting the Random Values like that?

∥☆過路亽.° 提交于 2021-02-04 17:26:05

问题


So... I was testing something and noticed that when I run this code:

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

The Output is

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

Why does the output start everytime with 1 to 5 uppercase letters? That "randomness" seems weird to me.

I would like to know why I get this result.


回答1:


array_rand (since PHP 5.2.10) no longer shuffles the list of random keys that it generates (you'll notice that your output strings are all in alphabetical order i.e. the characters are in the same order as they are in the input string). If you don't want that behaviour, use shuffle and array_slice instead:

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

Output:

dU54f9wBjZbAKgCP

Demo on 3v4l.org



来源:https://stackoverflow.com/questions/53892939/why-is-php-selecting-the-random-values-like-that

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!