Как я могу рандомизировать массив на PHP, предоставив семя и получив тот же порядок?

Я пытаюсь создать «случайную» строку на основе фиксированной строки. Я хотел бы иметь возможность, если вообще возможно, создать ту же случайную строку (я знаю ее оксюморон), если я использую одно и то же семя. вот так:

     $ base = '0123456789abcdef';
     $ seed = 'qwe123';

     функция get_seeded_random_string ($ base, $ seed) {
         ???
     }

Ожидаемое поведение состояло бы в том, что пока я даю то же $base и $seed я всегда получаю одну и ту же случайную строку.

Solutions Collecting From Web of "Как я могу рандомизировать массив на PHP, предоставив семя и получив тот же порядок?"

Извините, но в соответствии с документацией функция перетасовки автоматически загружается.

Как правило, вы не должны пытаться придумать свои собственные алгоритмы для рандомизации вещей, поскольку они, скорее всего, будут предвзятыми. Известно, что алгоритм Фишера-Йейса эффективен и беспристрастен:

 function fisherYatesShuffle(&$items, $seed) { @mt_srand($seed); $items = array_values($items); for ($i = count($items) - 1; $i > 0; $i--) { $j = @mt_rand(0, $i); $tmp = $items[$i]; $items[$i] = $items[$j]; $items[$j] = $tmp; } } 

Такая же функция для строки в php7

 function fisherYatesShuffle(string &$items, int $seed) { @mt_srand($seed); for ($i = strlen($items) - 1; $i > 0; $i--) { $j = @mt_rand(0, $i); $tmp = $items[$i]; $items[$i] = $items[$j]; $items[$j] = $tmp; } } 

Да, с mt_srand вы можете указать семя для «лучшего» генератора случайных чисел mt_rand .