如何在php中使用递归函数返回

cod*_*eek 2 php recursion

这是我的问题我正在尝试为我的应用程序创建一个随机条形码,我想检查该代码是否已经在列中而不是生成一个新数字,如果它的唯一返回它再次检查它再次检查它.我正在为此目的使用递归函数.我已经在我的数据库中添加了1,2,3,4号,因此每次运行时都必须显示5,6,7,8,9或10.

这是我的功能:

function generate_barcode(){
    $barcode = rand(1,10);
    $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'"));
    if($bquery==1){
        generate_barcode();
    }else{
        return $barcode;    
    }
 }
Run Code Online (Sandbox Code Playgroud)

我只是像这样测试它

 $a = generate_barcode();
 if(isset($a))
 {
   echo $a;
 }
 else
 {
  echo 'Not Set';
 }  
Run Code Online (Sandbox Code Playgroud)

所以问题是它有时会向我显示"未设置",但我希望它始终生成一个唯一的数字.我没有插入数据所以不是所有数字都保留的问题.

有人只是引导我,让我知道代码有什么问题.我可以使用其他方法来做到这一点,但我需要知道提供的代码有什么问题.谢谢

car*_*10m 9

您还需要从递归调用中返回生成的数字,例如

function generate_barcode()
{
    $barcode = rand(1,10);
   $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'"));
    if($bquery==1)
    {
    return generate_barcode(); // changed!
    }
    else
    {
    return $barcode;    
    }
 }
Run Code Online (Sandbox Code Playgroud)

(对于所有数字都被"采用"的情况,你应该包含某种退出.当前版本将递归调用自身,直到达到PHP递归限制,然后会抛出错误.)

  • 嘿@ hek2mgl,OP已经承认选择的方法不是“最好的方法”,并且*已经*已经在讨论这种递归方法-参见上文。他只是想知道为什么他的代码不起作用。因此,没有理由要您在这里辱骂。 (2认同)

PHP*_*hil 5

return 语句将一个值传递回当前函数调用帧的直接调用者。在递归的情况下,这个直接调用者可以是同一函数的另一个调用。

您可以通过执行以下操作来解决此问题:

改变:

generate_barcode();
Run Code Online (Sandbox Code Playgroud)

到:

return generate_barcode();
Run Code Online (Sandbox Code Playgroud)