2014-10-20 1 views
0

Могу ли я поставить условный оператор в оператор switch. ex-switch ($ totaltime < = 13) Помимо php, как насчет совместимости других языков с ним?PHP-Свидетель с условным переключателем

$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

Вы попробовали? –

+0

Какова конкретная проблема? Операторы не могут охватить все возможные случаи? – geoandri

+1

Это похоже на почти точный дубликат: http://stackoverflow.com/questions/4498739/problem-with-conditional-switch – icecub

ответ

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

Да, вы можете, из коммутатора документации РНР:

Оператор переключатель аналогичен серии IF заявления о том же выражении. Во многих случаях вам может потребоваться сравнить одну и ту же переменную (или выражение) со многими различными значениями.

Когда случай имеет постоянное значение, это как раз высказывание, значение case = значение переключателя, но вы можете иметь более сложную выражения для случая.

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 "Это было быстро!"; break; case ($ totaltime <= 5): echo "Не быстро!"; break; case ($ totaltime> = 10 && $ totaltime <= 13): echo "Это slooooow"; break; default: // ничего не делать break; } Джентльмен в этом случае, почему alwyas показывают вне как первый случай? – Nadishan

+0

Это потому, что вы соответствуете первому оператору case, который вычисляет false.'$ totaltime <= 1' оценивает' false', сопоставляя значение переключателя и, следовательно, выполняет код в этом случае. – Barry