Switch 語句
如果您希望有選擇地執行若干代碼塊之一,請使用 Switch 語句。
使用 Switch 語句可以避免冗長的 if..elseif..else 代碼塊。
語法
代碼如下 復制代碼 switch (expression)實例
工作原理:
對表達式(通常是變量)進行一次計算
把表達式的值與結構中 case 的值進行比較
如果存在匹配,則執行與 case 關聯的代碼
代碼執行後,break 語句阻止代碼跳入下一個 case 中繼續執行
如果沒有 case 為真,則使用 default 語句
switch ($cps_sign) {
case 'yiqifa':
case 'chengguo':
case 'roiyiqifa':
case 'lkt':
case 'fanli':
case 'qqfanli':
case 'weiyi':
case 'yoyi':
$sql = "INSERT into sa_cps_list (`uv`,`s_time`,`cps`,`url`) VALUES ('{$uv}',{$timestamp},'{$cps_sign}','{$url}')";
echo $sql;exit();
mysql_query($sql);
break;
default:
break;
}
仔細看了一下程序,莫非是switch和case惹的禍?於是,寫DEMO檢測。
//輸出結果為:bool(true) bool(false) xxx
var_dump(""==0);
var_dump(""===0);
$errid = '';
switch ($errid) {
case 0 :
echo "xxx";
break;
default:
echo "yyy";
}
真相大白了,原來 switch/case結構中,比較case值用的是==而不是===。這樣,空就和0相等了,我收到的結果也當然就是錯誤的了。
沒辦法,程序不想改,畢竟多條件的時候switch/case要比一堆if讓人看著舒心。想辦法吧。呵呵。
$result = '';
if(is_numeric($err_id) === false) {
$result .= '宕機或超時,沒有返回值';
return $result;
}
switch ($err_id) {
case xxx :
..........
}
問題解決了,先判斷一下返回值是否是數值,如果不是數值的話,直接return。
以後寫switch/case判斷數字的時候一定要小心,尤其是有0這個敗家值存在的時候
switch 語句和 elseif 語句的比較
在 switch 語句中,條件只求一次,然後和每個 case 比較,而在 elseif 語句中,條件會再次求值。如果你的條件比較復雜,或者是多次循環,用 switch 語句速度會更加快些