2016-03-25 53 views
-1

我的老師給了我這個任務。PHP範圍開關

做一個INT變量,表示一週(1-7)的一天。做一個switch語句具有以下情況:

  • 1-5 echo "Weekday";
  • 6-7 echo "Weekend";
  • 其他值echo "Unknown day";

我的問題是零。

起初我寫了這段代碼。

$day = 7; 

switch ($day) { 
    case $day >= 1 && $day <= 5: 
     echo "Weekday"; 
     break; 

    case $day >= 6 && $day <= 7: 
     echo "Weekend"; 
     break; 

    default: 
     echo "Unknown day"; 
     break; 
} 

它與每一個數字作品除了0。當$day = 0;它選擇第一種情況,並說這是一個平日

我也試過這個。

$day = 7; 

switch ($day) { 
    case 1-5: 
     echo "Weekday"; 
     break; 

    case 6-7: 
     echo "Weekend"; 
     break; 

    default: 
     echo "Unknown day"; 
     break; 
} 

但它更糟。我總是得到default選項。

我知道有更好的方法來做到這一點,但我只需要使用switch語句來做到這一點。

+1

檢查此http://php.net/manual/en/ control-structures.switch.php,但我認爲你可以添加到你的第一個代碼,你做了$ day> =,在'default:'之前添加'case 0'並且不添加中斷 – kunicmarko20

+2

看到這個答案:http: //stackoverflow.com/questions/1800798/php-case-statement-not-working-with-zero-values – Perry

回答

2

瞭解您的switch語句開關值與表達中的每個case語句比較:

如果$day = 0case $day >= 1 && $day <= 5:然後$day >= 1 && $day <= 5是假的,$day(從交換機值)鬆散型比較爲假,所以這個表達式評估爲真...並被執行。

switch/case不是if/elseif/else聲明的榮耀系列.....其定義的開關量和case語句之間的比較

編輯

至於你的第二次嘗試:

case 1-51減去5 = -4

2

您可以堆疊具有屬於一起的值的case語句。這裏是一個片段:

case 6: 
case 7: 
    echo "Weekend"; 
    break; 
1

雖然在此,我使用,如果哪個會更好在開關false nulll將等於0也很難與1比較,因爲它不是嚴格的,它被稱爲loose comprasion

碼開關:

<?php 

$day = 0; 

switch ($day) { 
    case 1: // if you put as day anything but 0, false, null it will go to true 
    case 2: 
    case 3: 
    case 4: 
    case 5: 
     echo 'weekday'; 
     break; 
    case 6: 
    case 7: 
     echo 'weekend'; 
     break; 
    default: 
     echo 'unknown'; 
} 

向@馬克·貝克寫開關,您比較的表達情況的結果看起來比較($天)每案值:

if ($day == 1-5) // 0 == -4 
elseif ($day == 6-7) // 0 == -1 
else 

可能工作,如果你沒有switch(true),但它沒有多大意義,代碼如下:

<?php 

$day = 7; 

switch (true) { 
    case $day > 0 && $day < 6: 
     echo 'weekday'; 
     break; 
    case $day === 6 || $day === 7 : 
     echo 'weekend'; 
     break; 
    default: 
     echo 'unknown'; 
}