2010-06-07 44 views

回答

-1

是有可能

下面是一個例子入手

<? 
     $i = 1; 
     $j = 10; 

     switch($i) { 
      case "2": 
        echo "The value is 2"; 
        break; 
      case ($i==1 && $j==10): 
        echo "Your exceptional Switch case is triggered"; 
        break; 
      default: 
        echo "Invalid"; 
        break; 
    } 
?> 
+0

這對於$ i = 0和$ j = 10以及case($ i == 0 && $ j == 10)有什麼影響? – 2010-06-07 08:57:54

+2

你的例子只工作,因爲$ i == 1 && $ j == 10的計算結果爲boolean True,而使用PHP的寬鬆輸入$ i等同於值爲1的true。如果$ i的值爲0,($ i == 1 && $ j == 10)仍然等同於布爾值True,但寬鬆輸入比較是針對0的$ i,這相當於布爾值false。不匹配 – 2010-06-07 09:08:27

+0

是因爲案例「2」輸入$ i作爲字符串,然後$ i == 1變爲true == true如果$ i不爲空? – MaximeBernard 2014-11-19 10:19:13

2

出了什麼問題只是嵌套交換機?

$i = 1; 
$j = 10; 

switch($i) { 
    case 2: 
     echo "The value is 2"; 
     break; 
    case 1: 
     switch($j) { 
      case 10: 
       echo "Exception Case"; 
       break; 
      default: 
       echo "The value is 1"; 
       break; 
     } 
     break; 
    default: 
     echo "Invalid"; 
     break; 
} 
+0

其無聊,嘗試starx之一,其更快 – Starx 2010-06-07 11:00:58

+2

閱讀我對starx例子的評論....它實際上並不正常工作 – 2010-06-07 12:05:38

9

switch聲明工程通過評估依次在每個case表達和結果比較的switch表達。如果兩個表達式是等價的,則執行該case塊(在由break/continue結構建立的約束內)。您可以使用這個事實來包含任意的布爾表達式,如case表達式。例如:

<?php 

$i = 3; 
$k = 'hello world'; 

switch (true) { 
    case 3 == $i and $k == 'hi there'; 
     echo "first case is true\n"; 
    break; 

    case 3 == $i and $k == 'hello world'; 
     echo "second case is true\n"; 
    break; 
} //switch 

?> 

此輸出:

second case is true 

我不使用這種結構的非常頻繁(而不是寧願避免這種複雜的邏輯),但有時出現其中一個複雜的if-then聲明可能會被使用,並且可以使這樣的片段更易於閱讀。