PHP For Loop奇怪的问题

Any reason why this code sometimes only generates 4 character strings?

function genID()
{
    $id     = '';
    $values = '0123456789abcdefghijklmnopqrstuvwxyz';

    for($i=0; $i < 5; $i++) :
        $str = substr($values, rand(0, strlen($values)), 1);
        if(!is_nan(acos($str)))
            (mt_rand(0, 1)) ? $str = strtoupper($str) : '';
        $id .= $str;
    endfor;

    return $id; // e.g: ifR8j
}

Try, something simple:


function genID() {
    $id = '';
    $i = $length = 4;
    $possible = "0123456789bcdfghjkmnpqrstvwxyz";
    $possibleChar = strlen($possible) - 1;
    while ($i) {
        $char = $possible[mt_rand(0, $possibleChar)];
        while (!strstr($id, $char)) {
            $id .= $char;
            $i--;
        }
    }

    return $id;
}

 (mt_rand(0, 1)) ? $str = strtoupper($str) : '';

This condition is met so sometimes you get an empty char.

Fix the condition or do the loop in some other manner. For example

while(strlen($id)<5) {
   //do the loop
}

The loop iterates 5 times.

rand will also return strlen, so $str will sometimes be ""

acos($str) accepts numbers not string.... if u remove the aphabets from the string

ie.

$values = '0123456789abcdefghijklmnopqrstuvwxyz';

to

$values = '0123456789';

you will get the length as 5... Hope this helps..

$str = substr($values, rand(0, strlen($values))-1, 1);

This will generate 5 characters always.