-1

私はphpで文字列ランダマイザーメソッドに取り組んでいます。メソッドの外では、すべてが正常に行われます。ただし、メソッドの内部では、次のエラーが発生します。

Warning: mt_rand() [function.mt-rand]: max(0) is smaller than min(1) in /home/content/44/10902444/html/makepage.php on line 14

メソッドのコードは次のとおりです。

function roll()
{
    $dir = "s/";
    for($i = 0; $i < 5; $i++)
    {
        $pick = mt_rand(1, strlen($validChars));
        $charPick = $validChars[$pick-1];
        $dir .= $charPick;
    }
    return $dir;
}

私はそれを次のように呼んでいます:

$url = roll();
while(is_dir($url))
{
   $url = roll();
}

私は Java プログラマーとして、自分が間違ったことをしていることを知っています。それが何であるかではありません;)どんな助けも大歓迎です。応答してくれた人に前もって感謝します!

編集:スコープの問題があることはわかっているため、の宣言を$validCharsメソッドに移動しました。それでもエラーが発生します:

Parse error: syntax error, unexpected T_STRING in /home/content/44/10902444/html/makepage.php on line 20
4

1 に答える 1

1

$validCharsfor ループの最初の実行で変数が定義されていません。$validCharsしたがって、変数の長さは 0 です。効果的に次のように呼び出します。

mt_rand(1, 0)

この関数呼び出しにより、投稿した通知が表示されます。

編集:

このコードは機能します:

function roll($validChars)
{
            $dir = "s/";
            for($i = 0; $i < 5; $i++)
            {
                $pick = mt_rand(1, strlen($validChars));
                $charPick = $validChars[$pick-1];
                $dir .= $charPick;
            }
            return $dir;
}

$validChars = "abcdefghijklmnopqrstuvwxyz0123456789-_.";
echo roll($validChars);   
于 2013-11-10T17:34:09.343 に答える