Php 这个递归函数正确吗?
我开发了这个函数,它使用递归来调用自己。我需要生成一个唯一的激活码Php 这个递归函数正确吗?,php,recursion,Php,Recursion,我开发了这个函数,它使用递归来调用自己。我需要生成一个唯一的激活码 class String { // Generates A Random String (Can be used for generating password etc.) //********************************************************************************* public function generateRandomStr
class String
{
// Generates A Random String (Can be used for generating password etc.)
//*********************************************************************************
public function generateRandomString($noofchars=8)
{
$salt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabchefghjkmnpqrstuvwxyz0123456789";
srand((double)microtime()*1000000);
$i = 0;
while ($i <= $noofchars)
{
$num = rand() % 33;
$tmp = substr($salt, $num, 1);
$string = $string . $tmp;
$i++;
}
return $string;
}
}
?>
事情是这样的:
1.使用单独类文件中的函数生成随机字符串。(见第二代码)
2.我正在检查激活表中该字符串的唯一性,以便不存在重复项。
3.如果随机字符串被重新生成,虽然我知道机会非常少,但我不想冒险。因此,我正在对照表格记录进行检查
如果生成的激活代码已经存在,那么函数应该再次调用它自己来生成一个新的激活代码,整个过程继续进行,直到我们得到一个表记录中不存在的唯一激活代码
class String
{
// Generates A Random String (Can be used for generating password etc.)
//*********************************************************************************
public function generateRandomString($noofchars=8)
{
$salt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabchefghjkmnpqrstuvwxyz0123456789";
srand((double)microtime()*1000000);
$i = 0;
while ($i <= $noofchars)
{
$num = rand() % 33;
$tmp = substr($salt, $num, 1);
$string = $string . $tmp;
$i++;
}
return $string;
}
}
?>
我的问题是,我是否正确地编码了它,即递归部分。请让我知道,如果它不正确,或者如果有人有更好或有效的方法来实现这一点
注意:我是从类文件调用这些函数的。简单地说,我正在使用OOPs。
所以我需要知道调用递归的代码应该是
return generateUniqueActivationCode();
或
我们将非常感谢您的帮助
// Generate Unique Activation Code
//*********************************************************************************
public function generateUniqueActivationCode()
{
$mysql = new Mysql();
$string = new String();
// This is coming from the 2nd part of code snippet that I have added
$activation_code = $string->generateActivationCode();
// Is Activation Code Unique Check
$sql = "SELECT activation_id FROM ". TABLE_ACTIVATION_CODES ." WHERE activation_code='$activation_code' LIMIT 1";
$query = $mysql->query($sql);
if($mysql->rowCount($query) > 0)
{
// This function is calling itself recursively
return generateUniqueActivationCode();
}
else
{
return $activation_code;
}
}
这是生成随机激活码的代码
class String
{
// Generates A Random String (Can be used for generating password etc.)
//*********************************************************************************
public function generateRandomString($noofchars=8)
{
$salt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabchefghjkmnpqrstuvwxyz0123456789";
srand((double)microtime()*1000000);
$i = 0;
while ($i <= $noofchars)
{
$num = rand() % 33;
$tmp = substr($salt, $num, 1);
$string = $string . $tmp;
$i++;
}
return $string;
}
}
?>
类字符串
{
//生成随机字符串(可用于生成密码等)
//*********************************************************************************
公共函数生成器域字符串($noofchars=8)
{
$salt=“abcdefghijklmnopqrstuvwxyzachefhjkmnpqrstuvxyzo123456789”;
srand((双)微时间()*1000000);
$i=0;
而我
我会这样打:
public function generateUniqueActivationCode(){
$mysql = new Mysql();
$string = new String();
do{
$activation_code = $string->generateActivationCode();
$sql = "SELECT activation_id FROM ". TABLE_ACTIVATION_CODES ." WHERE activation_code='$activation_code' LIMIT 1";
$query = $mysql->query($sql);
}while($mysql->rowCount($query) > 0);
return $activation_code;
}
执行此操作(至少运行一次),但只要行数返回大于0的值,就会重复此操作。您必须始终在PHP中预编
$this
(与C++不同).那么??你能解释一下你的编码是如何寻找唯一性的吗?我的意思是,如果激活码已经存在于表中,那么函数将如何递归调用自身并生成新的激活码?如果已经存在。它不是唯一的,对吗?函数名为generateUniqueActivationCode,你将返回一个。我需要返回一个唯一激活码的函数,该激活码根本没有被使用或分配给任何记录。在我看来,您的函数正在执行相反的操作,即,如果表中有0多条记录,则返回激活码。我将为您键入do psuedo样式:do ONE或WHILE为true。获取新的激活c如果匹配项大于零,请在数据库中进行ode搜索,重复Thnks,伙计,它成功了。很抱歉之前的问题,我不理解逻辑,但在阅读了do-while循环手册后,我获得了所有内容。再次感谢。干杯!!!!
class String
{
// Generates A Random String (Can be used for generating password etc.)
//*********************************************************************************
public function generateRandomString($noofchars=8)
{
$salt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabchefghjkmnpqrstuvwxyz0123456789";
srand((double)microtime()*1000000);
$i = 0;
while ($i <= $noofchars)
{
$num = rand() % 33;
$tmp = substr($salt, $num, 1);
$string = $string . $tmp;
$i++;
}
return $string;
}
}
?>