Итак … Я что-то тестировал и заметил, что когда я запускаю этот код:
$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 заглавных букв?
Эта «случайность» кажется мне странной.
Я хотел бы знать, почему я получаю этот результат.
array_rand
(начиная с PHP 5.2.10) больше не тасует список генерируемых им случайных ключей (вы заметите, что все ваши выходные строки расположены в алфавитном порядке, то есть символы расположены в том же порядке, что и во входной строке). Если вы не хотите такого поведения, используйте shuffle
а также array_slice
вместо:
$arr = str_split("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890", 1);
shuffle($arr);
echo implode('', array_slice($arr, 0, 16));
Выход:
dU54f9wBjZbAKgCP
Других решений пока нет …