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