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

时间:2015-07-25 07:59:57

标签: 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;    
    }
 }

我刚刚像这样测试了它

 $a = generate_barcode();
 if(isset($a))
 {
   echo $a;
 }
 else
 {
  echo 'Not Set';
 }  

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

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

4 个答案:

答案 0 :(得分:8)

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

spark.yarn.historyServer.address

(对于所有数字都被采取的情况,你应该包括某种退出&#39;。这个当前版本将递归调用自身,直到达到PHP递归限制,然后将抛出错误。)< / p>

答案 1 :(得分:3)

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

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

更改:

generate_barcode();

到:

return generate_barcode();

答案 2 :(得分:0)

你为什么不喜欢这个

$hash = md5( microtime().rand(0, 1000) );

添加时间组件意味着pretty much将是唯一的。除非你有32 ^ 32个。

它必须只是数字吗?如果是这样的话,只需使用pkey并添加10000就可以了。或者这样。

更新经过仔细分析后,它没有任何问题,但是:

$a = generate_barcode();
 if(isset($a))  <<< this bit

看到你返回唯一值然后你说它是isset我的唯一值,并且$a将始终被设置,因为如果它不是你递归函数直到它,然后你返回它。因此总是设置......

NM:我已经累了4点30分左右,大约17小时,哈哈,

答案 3 :(得分:0)

您要做的是:

while(true) {
    $barcode = rand(1,10);
    $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'"));
    if($bquery===0){
        break;
    }
}

echo $barcode;

然而,这显然只适用于10个条形码,并在此之后导致无限循环 - 这意味着它不是创建大量条形码的正确方法。

相反,我建议使用auto_increment生成条形码。

顺便说一句,mysql扩展程序已弃用。使用mysqliPDO获取新代码。