的轉到聲明,主要是 - 如果有的話 - 用於錯誤處理:在陳述一個長長的清單,它們中的每能夠觸發一個錯誤,在函數底部附近進行了跳轉(goto),以跳過所有剩餘的語句,並在函數結尾處運行一個通用的錯誤處理器。
但現在,即使PHP有異常處理,因而使用轉到的還要少有道理的。
修復提到
在你的情況的問題,你可以實現一個簡單的算法來執行同等功能
do {
$rnumber = rand(1, 10);
$queryresult = $mysqli->query("SELECT uniquerandomcolumn FROM tbldata WHERE uniquerandomcolumn =" . $rnumber);
} while ($queryresult->num_rows > 0);
具有在存在風險的無限(或非常長)環......
改進的餘地
由於嘗試的次數是有限的(1 .. 10),這將是更好的
- 嘗試所有數字從1到10(最大)一旦而不重複
隨機
- (例如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...
}
對付兩個條件後。
[PHP中goto的有效用例是什麼?](http://stackoverflow.com/questions/4843551/what-are-the-valid-use-cases-of-goto-in-php ) – BoltClock
就你而言,你可以用一段時間來代替。 – evuez
請參閱:http://xkcd.com/292/ –