簡體   English   中英

PHP如果為true,則重新運行該函數,直到條件為false

[英]PHP If true rerun the function until condition is 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()

並且它將返回true或false,現在,如果返回true,則需要重新運行該函數並再次進行生成,然后再次執行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() )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM