8

固定文字列に基づいて「ランダム」文字列を作成しようとしています。同じシードを使用すれば、可能であれば、同じランダムな文字列(私はその撞着語を知っています)を作成できるようにしたいと思います。そのようです:

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

    関数get_seeded_random_string($ base、$ seed){
        ???
    }

期待される動作は、同じものを与え、常に同じランダムな文字列を取得する限り$baseです$seed

4

2 に答える 2

12

申し訳ありませんが、ドキュメントによると、シャッフル関数は自動的にシードされます。

通常、物事をランダム化するために独自のアルゴリズムを考え出そうとするべきではありません。ただし、Fisher-Yatesアルゴリズムは効率的で偏りがないことが知られています。

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;
    }
}
于 2011-07-02T15:31:31.453 に答える
2

はい、mt_srand「より良い」乱数ジェネレーターのシードを指定できますmt_rand

于 2010-07-03T00:24:54.930 に答える