2012-09-26 22 views
14

Ai đó có thể đề xuất cách tốt nhất để có tuyên bố chuyển đổi sau đây? Tôi không biết rằng nó có thể so sánh hai giá trị cùng một lúc, nhưng điều này sẽ là lý tưởng:tuyên bố chuyển đổi với hai biến tại một thời điểm

switch($color,$size){ 
    case "blue","small": 
     echo "blue and small"; 
    break; 

    case "red","large"; 
     echo "red and large"; 
    break; 
} 


Điều này có thể được so sánh với:

if (($color == "blue") && ($size == "small")) { 
    echo "blue and small"; 
} 
elseif (($color == "red") && ($size == "large")) { 
    echo "red and large"; 
} 

Cập nhật Tôi nhận ra rằng tôi sẽ cần để có thể phủ nhận ($color !== "blue") và so sánh như trái ngược với các biến tương đương với chuỗi.

+1

Vấn đề thực tế bạn đang cố giải quyết là gì? –

+0

Câu trả lời dưới đây bởi @Stikmou và Renaat De Muynck đáp ứng câu hỏi của người hỏi một cách hoàn hảo. Câu trả lời khác, trong khi chắc chắn hợp pháp, đang đi về giải pháp theo những cách hơi khác nhau. – Aaron

Trả lời

25

Bạn có thể thay đổi thứ tự so sánh, nhưng điều này vẫn không lý tưởng.

switch(true) 
    { 
     case ($color == 'blue' and $size == 'small'): 
     echo "blue and small"; 
     break; 
     case ($color == 'red' and $size == 'large'): 
     echo "red and large"; 
     break; 
     default: 
     echo 'nothing'; 
     break; 
    } 
+3

ẩn dật xấu xí, nhưng không phải là "sai" hoặc là ... tốt hơn để đi với một tiêu chuẩn if() thay vào đó, nếu chỉ cho dễ đọc. –

+1

Cảm ơn! Tôi đồng ý .. có thể lộn xộn, và có lẽ sẽ. Tôi đang cố gắng để xem liệu 'switch' có thể làm cho câu lệnh if trông đẹp hơn và dễ dàng hơn để sửa đổi trong tương lai. –

+0

Tôi nghĩ nó hoàn hảo. Đối với thế giới thực, đây là những gì các nhà phát triển thực sự sử dụng. –

16

Không hoạt động. Bạn có thể hack xung quanh nó với một số chuỗi concatentation:

switch($color . $size) { 
    case 'bluesmall': ... 
    case 'redlarge': ... 
} 

nhưng điều đó trở nên xấu xí khá nhanh chóng.

+0

Điều này có thể hoạt động !! –

+4

Chỉ cần cẩn thận với các giá trị mơ hồ có thể không khớp với thông thường, ví dụ: bật 'abc'. 'def'', trong khi trường hợp là' 'ab'. 'cdef''. hai bộ giá trị khác nhau, nhưng tạo ra cùng một kết quả ghép nối. –

+0

sẽ không phải là vấn đề đối với những gì tôi đang làm, nhưng đó là một điểm tốt để đưa lên. Dù sao cảm ơn cho các trick! –

0
var $var1 = "something"; 
var $var2 = "something_else"; 
switch($var1.$var2) { 
case "somethingsomething_else": 
    ... 
    break; 
case "something...": 
    break; 
case "......": 
    break; 
} 
+0

PHP, không phải javascript. –

0

tùy chọn khác của bạn (mặc dù không đẹp) là tổ báo cáo chuyển đổi:

switch($color){ 
    case "blue": 
     switch($size): 
      case "small": 
      //do something 
      break; 
    break; 
} 
22

Sử dụng cú pháp mảng mới, điều này có vẻ gần giống như những gì bạn muốn:

switch ([$color, $size]) { 
    case ['blue', 'small']: 
     echo 'blue and small'; 
    break; 

    case ['red', 'large']; 
     echo 'red and large'; 
    break; 
} 
Các vấn đề liên quan