gotoステートメントは主に(存在する場合)エラー処理に使用されました。ステートメントの長いリストでは、それぞれがエラーをトリガーする可能性があり、残りのすべてのステートメントをスキップするために関数の下部近くでジャンプ (goto) が行われました。 、関数の最後で一般的なエラー プロセッサを実行します。
しかし、今日では、PHP でさえ例外処理を行っているため、 gotoの使用はさらに正当化されません。
前述のように問題を修正します
あなたの場合、単純なアルゴリズムを実装して同等の機能を実行できます
do {
$rnumber = rand(1, 10);
$queryresult = $mysqli->query("SELECT uniquerandomcolumn FROM tbldata WHERE uniquerandomcolumn =" . $rnumber);
} while ($queryresult->num_rows > 0);
無限(または非常に長い)ループに陥るリスクがあります...
改善の余地
試行回数が限られているので (1 .. 10)、
- 繰り返しなしで 1 から 10 (最大) までのすべての数字を 1 回試す
- ランダム (例: 7 2 3 9 ...)
つまり、最大10 回の試行を実行し、行が存在しない場合、または 10 回の試行がすべて完了した場合に終了します。1 から 10 までランダムに試すには、shuffle関数を使用して、1 から 10 の要素の配列をランダムにシャッフルします。
$tries = array();
for ($i=1 ; $i<=10 ; $i++) $tries[] = $i; // create an array (1,2,3,4,5...)
shuffle ($tries); // shuffle the array, eg now $tries is (8,2,9,1,7...)
$index = 0; // start with first element of $tries
do {
$rnumber = $tries[$index++];
$queryresult = $mysqli->query("SELECT uniquerandomcolumn FROM tbldata WHERE uniquerandomcolumn =" . $rnumber);
} while ($queryresult->num_rows > 0 && $tries < 10);
このようにして、10 個すべての可能な値をランダムに試します。それ以上ではありません。
しばらくして追加
if ($queryresult->num_rows < 1) {
// found a non existing number: $tries[$index-1]
}
else {
// all 10 numbers exist in the DB...
}
2つの条件に対処します。