問題:
要產生唯一的條碼,遞歸函數是用於確保資料庫中不存在重複條目。但是,該函數有時會傳回“Not Set”而不是唯一的數字。確定原因並修正以下有缺陷的程式碼:
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; }
答案:
問題在於遞歸呼叫缺少 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(); // changed! else return $barcode; }
額外考慮:
防止在所有數字都為的情況下無限遞歸保留,包含一個停止遞歸並引發錯誤的條件至關重要,例如:
if ($recursiveCalls > 1000) // or any suitable limit throw new Exception('Failed to generate a unique barcode within the specified limit.');
透過合併這些修改,該函數將始終傳回唯一的條碼並處理所有數字的邊緣情況正在被帶走。
以上是為什麼我的遞歸 PHP 條碼產生器有時會回傳「未設定」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!