2014-07-17 28 views
16

Vì vậy, tôi có bốn điều kiện mà tôi cần phải trải qua và tôi nghĩ tốt nhất nên sử dụng câu lệnh switch trong PHP. Tuy nhiên, tôi cần phải kiểm tra xem một số nguyên là, hãy nói, nhỏ hơn hoặc bằng hoặc lớn hơn và bằng nhau.Sử dụng toán tử so sánh trong chuyển đổi PHP

switch ($count) { 
    case 20: 
     $priority = 'low'; 
     break; 

    case 40: 
     $priority = 'medium'; 
     break; 

    case 60: 
     $priority = 'high'; 
     break; 

    case 80: 
     $priority = 'severe'; 
     break; 
} 

Với một tuyên bố if() nó sẽ trông giống như sau:

if ($count <= 20) { 
    $priority = 'low'; 
} 

if ($count <= 40) { 
    $priority = 'medium'; 
} 

Là có thể trong switch-case?

+6

Bạn cũng có thể 'chuyển đổi (đúng)' và trả về true trên các trường hợp thỏa mãn phạm vi [Ví dụ] (http://stackoverflow.com/a/8876696/2344142). Nếu điều này ở quy mô nhỏ hơn, bạn chỉ có thể lặp lại các con số trong phạm vi và để chúng chảy vào nhau [Ví dụ] (http://stackoverflow.com/a/4163212/2344142). Nhưng vâng cho ví dụ của bạn, bạn nên sử dụng một câu lệnh if. –

+3

gắn bó với bạn nếu –

+0

@DaveChen Đó là một mẹo hay. – Havenard

Trả lời

57

Một trường hợp tổng quát hơn để giải quyết vấn đề này là:

switch (true) { 
    case $count <= 20: 
     $priority = 'low'; 
     break; 

    case $count <= 40: 
     $priority = 'medium'; 
     break; 

    case $count <= 60: 
     $priority = 'high'; 
     break; 

    default: 
     $priority = 'severe'; 
     break; 
} 
2

Số switch() báo cáo là để thực hiện nhiều phép kiểm tra bình đẳng. Về cơ bản, chúng chỉ đơn giản là một phiên bản dễ đọc hơn (nhưng cũng nguy hiểm hơn) của

if (x == 'a') { ... } 
else if (x == 'b') { ... } 
else if (x == 'c') { ... } 

mã. Không có cách nào để thay đổi số switch() từ == thành < hoặc bất kỳ toán tử so sánh nào khác. Đó là hoàn toàn cho thử nghiệm bình đẳng.

+0

có gì sai với giải pháp @Konr Ness? –

1

tắc không thể làm điều đó, nhưng trong trường hợp đặc biệt này, bạn có thể làm một cái gì đó như thế này:

switch ((int)(($count - 1)/20)) { 
    case 0: 
     $priority = 'low'; 
     break; 
    case 1: 
     $priority = 'medium'; 
     break; 
    case 2: 
     $priority = 'high'; 
     break; 
    case 3: 
     $priority = 'severe'; 
     break; 
} 

Vì vậy, trong tất cả các giá trị (int)(($count - 1)/20) 0-20 sẽ eval 0, 21-40 sẽ eval để 1 và cứ như vậy, cho phép bạn sử dụng câu lệnh chuyển đổi cho mục đích này.

Và vì chúng ta đang concatenating giá trị, chúng tôi thậm chí có thể đơn giản hóa đến một mảng:

$priorities = ['low', 'medium', 'high', 'severe']; 
$priority = $priorities[(int)(($count - 1)/20)]; 
1

Có một cách mà làm việc trong php 7 sử dụng các toán tử gán bậc ba. Toán tử đã được giới thiệu trước đó (5.4?) Nhưng tôi chưa bao giờ thử nghiệm mã trên các phiên bản khác. Tôi đã viết toàn bộ mã chuyển đổi there, tuy nhiên đối với ngắn gọn ở đây chỉ là mệnh đề cụ thể. Hãy nói rằng chúng ta muốn điều kiện để phù hợp cho tất cả các số lớn hơn hoặc bằng năm:

switch($value){ 
case ($value >= 5?$value:!$value)://do something here 
break; 
}  

Chúng tôi hoặc là cho phép các giá trị $ để vượt qua không thay đổi hoặc chúng ta phủ nhận giá trị theo điều kiện. Giá trị $ sẽ luôn luôn khớp với chính nó hoặc không vượt qua được thử nghiệm so với phủ định của nó.

+0

Có thể xác nhận rằng phương pháp này hoạt động trở lại atleast php 5.5 –

Các vấn đề liên quan