2014-10-20 98 views
0

我可以在switch語句中放置條件語句嗎? ex - switch($ totaltime < = 13)除了php,其他語言如何兼容?PHP-帶條件開關的Swich case語句

$totaltime=15; 

switch ($totaltime<=13) { 

case ($totaltime <= 1): 
echo "That was fast!"; 
break; 

case ($totaltime <= 5): 
echo "Not fast!"; 
break; 

case ($totaltime >= 10 && $totaltime<=15): 
echo "That's slooooow"; 
break; 
} 

編輯

$totaltime=12; 
switch (false) { 
case ($totaltime <= 1): 
echo "That was fast!"; 
break; 
case ($totaltime <= 5): 
echo "Not fast!"; 
break; 
case ($totaltime >= 10 && $totaltime<=13): 
echo "That's slooooow"; 
break; 
default: // do nothing break; 
} 

紳士在這種情況下,爲什麼alwyas顯示爲 「真快!」 輸出?

+0

你試過了嗎? – 2014-10-20 18:57:37

+0

確切的問題是什麼?運營商無法涵蓋所有​​可能的情況? – geoandri 2014-10-20 18:58:15

+1

這就像一個幾乎完全相同的副本:http://stackoverflow.com/questions/4498739/problem-with-conditional-switch – icecub 2014-10-20 19:00:04

回答

2

交換機只檢查第一條件是等於第二,這種方式:

switch (CONDITION) { 
    case CONDITION2: 
     echo "CONDITION is equal to CONDITION2"; 
    break; 
} 

所以你要做的它這樣:

switch (true) { 
    case $totaltime <= 1: #This checks if true (first condition) is equal to $totaltime <= 1 (second condition), so if $totaltime is <= 1 (true), is the same as checking true == true. 
     echo "That was fast!"; 
    break; 

    case $totaltime <= 5: 
     echo "Not fast!"; 
    break; 

    case $totaltime >= 10 && $totaltime<=13: 
     echo "That's slooooow"; 
    break; 
} 

而不是我會去if-elseif聲明。乍一看更容易理解:

if ($totaltime <= 1) { 
    echo "That was fast!"; 
} elseif($totaltime <= 5) { 
    echo "Not fast!"; 
} elseif($totaltime >= 10 && $totaltime<=13) { 
    echo "That's slooooow"; 
} 
0

是的,你可以從PHP的開關文檔:

switch語句是類似於一系列的IF相同的表達式語句。在很多場合,您可能需要將相同的變量(或表達式)與很多不同的值

當案件具有恆定的值進行比較,這就像說,案值==開關值,但你可以有更復雜表達式的情況。

1

當然可以(除開關內的比較)

$totaltime=12; 

switch (true) { 

case ($totaltime <= 1): 
echo "That was fast!"; 
break; 

case ($totaltime <= 5): 
echo "Not fast!"; 
break; 

case ($totaltime >= 10 && $totaltime<=13): 
echo "That's slooooow"; 
break; 

default: 
// do nothing 
break; 
} 
+0

$ totaltime = 12; switch(false){ case($ totaltime <= 1): echo「That is fast!」; 休息; ($ totaltime <= 5): echo「Not fast!」; 休息; ($ totaltime> = 10 && $ totaltime <= 13): 休息; 默認值: //什麼都不做 break; } 紳士在這種情況下,爲什麼alwyas顯示出作爲第一種情況? – Nadishan 2014-10-20 19:08:05

+0

這是因爲您與第一個計算結果爲false的case語句匹配。'$ totaltime <= 1'的計算結果與交換值匹配的'false',因此在這種情況下執行代碼。 – Barry 2014-10-20 19:16:11