How To Fix PHP Random Being The Same

Having spent some time dealing with random numbers in C#, i was a little stumped when coming to php when I found myself having random numbers coming out the same. I know from dealing with this before that it is caused by the server being so fast that the seed doesnt have time to change. Holding onto the random context in C# is how to work around this but with PHP, random is not part of an object that you can instantiate. So how do you deal with PHP rand producing the same numbers while in a loop. For example.

foreach($words as $word)
{
    if(mt_rand(0,1) == 1)
    {
        //do this
    }
    else
    {
        //do that
    }
}

Using mt_rand was the first suggestion, but since I was already using PHP7 I was made aware that the old rand methods are now just aliases for these new random functions. Either way, it didnt fix the problem. The solution was to come up with some kind of seed that would be unique for my problem that I could feed into the library to ensure that PHP would come up with a random value each time.

I have come up with a rather simple seed method that will ensure that you will get a completely random value, every time by simply having a piece of text to produce a random seed.  This method will take the string and convert the letters to their ASCII value (or something like that) to produce a random number. All of these random numbers are combined into a string to produce a completely random number. This allowed me to reset the random seed for each loop I was doing and ensured that each word I was dealing with, had a proper random number generated to go along with it.

function SetRandomSeed($string)
{
    for($i = 0; $i < strlen($string); $i++) 
    {
        $result .= ord($string[$i]);
    }
    mt_srand($result . time());
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.