我正在使用此函数创建一个随机字符串,但是如何让它为500个字符串生成唯一的字符串列表?
function generateRandomString($length = 8) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
答案 0 :(得分:1)
如果您担心表格中插入的行,那么有3种简单的方法可以做到。
首先, 您可以检查数据库中是否存在该字符串,然后创建另一个随机字符串。
第二种方式, 使用mysql的UUID()函数生成随机值,无需担心重复。
第三种方式, 如果你想要数组,生成500个字符串并放入一个数组。然后使用array_unique()删除重复。如果数组长度<1。 500然后生成更多(例如12个字符串)然后检查是否&lt; 500一次又一次,直到达到500.检查可以在一个循环左右完成。
while( count($arr) < 500 )
{
$arr[] = generateRandomString();
if( count($arr) == 500 )
$arr = array_unique( $arr );
}
答案 1 :(得分:0)
@MohamedFadili你需要首先使用generateRandomString();
生成你的字符串,然后检查它是否存在于数据库中,在这种情况下你需要继续尝试,直到找到一个不存在的字符串,以避免死循环,你可以X尝试后抛出异常(X = 10可能?)所以代码看起来如下所示:
一个。如果数据库中有唯一约束(插入时会抛出异常)
$attempts = 10;
$i = 0;
$inserted = false;
while (!$inserted || $i < $attempts) {
try {
$myRandomString = generateRandomString();
// MySQL CODE TO DO YOUR INSERT HERE IT COULD THROW AN EXCEPTION IF THE STRING ALREADY EXIST IN DATABASE
// here if insertion operation was successful you set $inserted variable to true
$inserted = true;
} catch (PDOException $ex){
// do nothing
}
}
湾如果数据库中没有唯一的索引约束,则需要由您自己检查:
$attempts = 10;
$inserted = false;
while (!$inserted || $i < $attempts){
$myRandomString = generateRandomString();
// SQL CODE TO CHECK IF $myRandomString Exist
// IF NOT EXIST DO INSERT AND SET $inserted to true
$inserted = true;
// ELSE IF EXIST KEEP TRYING
}
答案 2 :(得分:0)
技巧不是生成500个字符串的列表。显然,您可以使用for
循环完成此操作:
$random = array();
for ($i = 0; $i < 500; $i++)
$random[] = generateRandomString();
你想要的是500个唯一的字符串。正如@meh指出的那样,您可以通过使用array_unique
不断消除重复项来实现此目的。不过,我不是每次通过时都是这样做的忠实粉丝,因为它导致生成一个新的,独特的阵列至少500次!我更喜欢做的是在将每个值插入数组之前检查它是不是重复。搜索比搜索和删除更快,而搜索和删除又比n²搜索和删除更快。这样的事情,也许是:
$unique = array();
for ($i = 0; $i < 500; $i++)
{
do
{
$random = generateRandomString();
} while (in_array($random, $unique));
$unique[] = $random;
}