Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这个递归函数正确吗?_Php_Recursion - Fatal编程技术网

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;
    }   
}
?>