PHP для Loop странная проблема - PullRequest
1 голос
/ 04 января 2012

Любая причина, почему этот код иногда генерирует только 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 ]

4 голосов
/ 04 января 2012

acos ($ str) принимает числа, а не строки .... если вы удалите символы из строки

т.е..

$values = '0123456789abcdefghijklmnopqrstuvwxyz';

до

$values = '0123456789';

вы получите длину как 5 ... Надеюсь, это поможет ..

3 голосов
/ 04 января 2012

Попробуйте, что-нибудь простое:


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

0 голосов
/ 04 января 2012
$str = substr($values, rand(0, strlen($values))-1, 1);

Это всегда будет генерировать 5 символов.

0 голосов
/ 04 января 2012

Цикл повторяется 5 раз.

rand также вернет strlen, поэтому $str иногда будет ""

0 голосов
/ 04 января 2012
 (mt_rand(0, 1)) ? $str = strtoupper($str) : '';

Это условие выполняется, поэтому иногда вы получаете пустой символ.

Исправьте условие или выполните цикл другим способом.Например

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