PHP の再帰関数内での Return の利用
PHP では、再帰関数は複雑な問題を解決するための強力なツールとなります。再帰関数を作成する場合、正しいロジックを確保し、無限ループを回避するには、return ステートメントを適切に利用することが重要です。
このような利用法が見落とされがちなケースの 1 つは、次のシナリオで例示されているように、一意の値を生成する場合です。
質問:
目標は、データベース列にまだ存在していないランダムなバーコードを生成することです。この関数は再帰を使用して、一意の番号が見つかるまで繰り返し番号を生成します。ただし、この関数は、一意の番号を生成する代わりに「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; } }
答え:
提供されたコードの問題は再帰呼び出しにあります。関数が確実に一意の番号を正しく返すようにするには、新しく生成された番号を再帰呼び出し自体から返す必要があります。
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(); // updated } else { return $barcode; } }
生成された番号を再帰呼び出しから返すことにより、関数は呼び出し元が
追加の考慮事項:
すべての数値が取得された場合の終了条件。そのような条件がない場合、関数は PHP の再帰制限に達するまで自分自身を再帰的に呼び出し、エラーが発生します。
以上が再帰的な PHP 関数が、固有のバーコードではなく「Not Set」を返す場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。