PHP 如果为 true,则重新运行该函数,直到条件为 false



所以我有一个创建随机字符串的函数,如下所示:

 function createToken($len = 5) {
        $set = '123456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
        $setLen = strlen($set);
        $token = '';
        for ($i = 0; $i < $len; $i++) {
            $token .= $set[rand(0, $setLen - 1)];
        }
        return $token;
    }

现在我需要运行这个函数并检查返回令牌是否已在数据库中。由于我正在使用Laravel,因此我可以通过以下方式进行检查:

$modelName->whereToken($token)->exists()
它将返回真

或假,现在如果它返回真,我需要重新运行函数并再次生成,然后再次执行 if 存在并一遍又一遍地这样做,直到它找到一个在 ->exists(( 上返回 false 的函数。

您可以使用 do-while 循环:

do {
  $token = createToken();
} while($modelName->whereToken($token)->exists())
//Your token is unique

不要忘记将unique索引添加到数据库表 https://laravel.com/docs/5.4/migrations#indexes

 function createToken($len = 5) {
    do {
        $set = '123456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
        $setLen = strlen($set);
        $token = '';
        for ($i = 0; $i < $len; $i++) {
            $token .= $set[rand(0, $setLen - 1)];
        }
    }
    while($modelName->whereToken($token)->exists());
    return $token;
}

您可以使用do...while循环。 语法是这样的:

do {
code to be executed;
} while (condition is true);

因此,在您的情况下,代码将是这样的:

do {
  $token = createToken();
} while( $modelName->whereToken($token)->exists() )

最新更新