在建立 PHP 函數來產生唯一值時,遞歸可能是有用的工具。在此範例中,目標是建立資料庫列中尚不存在的隨機條碼。
使用者嘗試使用遞歸函數來實現此功能,但是遇到一個問題,該函數有時會傳回「未設定」而不是唯一的條碼。使用者程式碼如下:
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(); // original code } else { return $barcode; } }
原程式碼的問題是觸發遞歸呼叫時無法傳回產生的條碼。要解決此問題,還需要將 return 語句加入遞歸呼叫中:
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(); // return added } else { return $barcode; } }
透過在遞歸呼叫中包含 return 語句,產生的條碼將在堆疊中向上傳遞並最終由初始函數呼叫。
要注意的是,遞迴函數可以有遞迴限制。在 PHP 中,遞歸有一個最大深度限制,如果超過該限制,就會拋出錯誤。為了防止這種情況,建議在遞歸函數中加入某種退出條件,例如最大嘗試次數或在用盡所有可能選項時終止遞歸的條件檢定。
以上是遞歸 PHP 函數如何確保產生唯一的條碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!