PHP For Loop奇怪的问题

时间:2012-01-04 09:09:46

标签: php string loops random for-loop

为什么这段代码有时只生成4个字符串?

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
}

5 个答案:

答案 0 :(得分:4)

acos($ str)接受的数字不是字符串....如果你从字符串中删除了aphabets

$values = '0123456789abcdefghijklmnopqrstuvwxyz';

$values = '0123456789';

你的长度为5 ...希望这会有所帮助..

答案 1 :(得分:3)

尝试,简单的事情:


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;
}

答案 2 :(得分:0)

循环迭代5次。

rand也会返回strlen,因此$str有时会""

答案 3 :(得分:0)

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

满足此条件,因此有时您会得到一个空字符。

修复条件或以其他方式执行循环。 例如

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

答案 4 :(得分:0)

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

这将始终生成5个字符。