php - 在我的 for 循环中生成不同的随机字符串

标签 php loops for-loop

我有以下函数来生成随机字符串:

public function generateString(){
    function generateCharacter () {
        $possible = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
        return $char;
    }
    function generateNumber () {
        $GUID = generateCharacter().generateCharacter().generateCharacter().generateCharacter().generateCharacter().generateCharacter().generateCharacter().generateCharacter().generateCharacter();
        return $GUID;
    }
    $string = generateNumber();
    return $string;
}

然后,我需要能够使用 for 循环生成这些随机字符串 x 次,并将它们插入到我的 MySQL 表中:

$how_many 是我选择要循环多少次的地方。

for ($i = 1; $i <= $how_many; $i++) {

        $random = $this->generateString();

        $query_params = array( 
            ':code' => $random,
        );
        $query = " 
            INSERT INTO table
            ( 
                code
            ) 
            VALUES 
            ( 
                :code
            )
        ";
        try { 
            $stmt = DB::get()->prepare($query); 
            $stmt->execute($query_params); 
        }  
        catch(PDOException $ex) {} 

    }

上面给了我一个错误:

Fatal error: Cannot redeclare generateCharacter() (previously declared in....

我知道我不能在 for 循环中使用该函数,否则我会收到此错误,但如果我在循环之外使用它,它只会生成一次字符串并每次插入相同的字符串。

我怎样才能得到它,以便循环中的每个插入都是一个新的随机字符串?

最佳答案

不要编写已经编写的函数。

PHP 有一个名为 uniqid() 的函数

来自手册

uniqid() Gets a prefixed unique identifier based on the current time in microseconds.

uniqid() 返回的值将是 13 个字符长。如果 more_entropy 为 TRUE,则它将是 23 个字符。

要获取随机数,您可以使用 rand()功能。

在您的代码中,您在循环中多次准备相同的语句。这是非常不好的习惯。在循环之前准备语句,然后只在循环中执行和绑定(bind)参数。这样更有效。

关于php - 在我的 for 循环中生成不同的随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17273660/

相关文章:

PHP 获取数组中重复次数最多的项

遍历 3D 数组的 Pythonic 方式

c - 在 Windows 上迭代目录时查找句柄无效

javascript - 将日期对象存储到数组

PHP - 需要动态导航栏帮助

php - 为什么每当我刷新页面时,都会创建新的 CI session ?

javascript - 如何使用 Fetch API 从表单中检索和发送数据?

loops - 在ansible中迭代字典中的列表

java - 使用 for-each 循环打印 ArrayList

c++ - 了解循环输出