ホームページ >バックエンド開発 >PHPチュートリアル >再帰的な PHP 関数はどのようにして確実に一意のバーコードを生成できるのでしょうか?

再帰的な PHP 関数はどのようにして確実に一意のバーコードを生成できるのでしょうか?

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

How Can Recursive PHP Functions Ensure Unique Barcode Generation?

Return を伴う再帰を使用して PHP で一意のバーコードを生成する

一意の値を生成する 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(); // 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 中国語 Web サイトの他の関連記事を参照してください。

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