-3

以下のコードのリスト行で未定義のオフセットを取得します。理由はありますか?オフセットエラーが発生してもパスワードは生成されます

function generatePassword($length=6,$level=2){

   list($usec, $sec) = explode(' ', microtime(true));
   srand((float) $sec + ((float) $usec * 100000));  

   $validchars[1] = "23456789abcdefghjkmnpqrstuvwxyz";
   $validchars[2] = "23456789abcdefghjkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
   $validchars[3] = "23456789_!@#$%&*()-= /abcdefghjkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ_!@#$%&*()-= /";

   $password  = "";
   $counter   = 0;

   while ($counter < $length) {
     $actChar = substr($validchars[$level], rand(0, strlen($validchars[$level])-1), 1);

     // All character must be different
     if (!strstr($password, $actChar)) {
        $password .= $actChar;
        $counter++   ;
   }
   }

   re

$password を有効にします。

}

4

1 に答える 1

1

microtime(true)スペースを含まない float 値を返します。したがって、配列内に少なくとも 2 つの項目が必要になるため、explode()項目が 1 つだけでパラメーターが 2 つの配列を返すと失敗します。代わりにlist使用してください:microtime(false)

list($usec, $sec) = explode(' ', microtime(false));
于 2013-02-02T15:00:12.960 に答える