ホームページ >バックエンド開発 >PHPチュートリアル >再帰的 PHP バーコード ジェネレーターが時々「Not Set」を返すのはなぜですか?

再帰的 PHP バーコード ジェネレーターが時々「Not Set」を返すのはなぜですか?

DDD
DDDオリジナル
2024-12-20 21:12:12217ブラウズ

Why Does My Recursive PHP Barcode Generator Sometimes Return

PHP で再帰と結果の取得を処理する方法

質問:

一意のバーコードを生成するには、再帰関数を使用します。データベース内に重複したエントリが存在しないことを保証するために使用されます。ただし、この関数は、一意の数値の代わりに「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 ステートメントがないことにあります。これは、関数が再帰のその分岐で生成された数値を返さないことを意味し、「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)
        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 バーコード ジェネレーターが時々「Not Set」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。