Cách sử dụng trường hợp chuyển đổi 'hoặc' trong PHP


230

Có cách nào sử dụng toán tử 'HOẶC' hoặc tương đương trong chuyển đổi PHP không?

Ví dụ, một cái gì đó như thế này:

switch ($value) {

    case 1 || 2:
        echo 'the value is either 1 or 2';
        break;
}

Câu trả lời:


505
switch ($value)
{
    case 1:
    case 2:
        echo "the value is either 1 or 2.";
    break;
}

Điều này được gọi là "rơi qua" khối trường hợp. Thuật ngữ tồn tại trong hầu hết các ngôn ngữ thực hiện một tuyên bố chuyển đổi.


135

Nếu bạn phải sử dụng ||với switchthì bạn có thể thử:

$v = 1;
switch (true) {
    case ($v == 1 || $v == 2):
        echo 'the value is either 1 or 2';
        break;
}

Nếu không giải pháp ưa thích của bạn sẽ có được

switch($v) {
    case 1:
    case 2:
        echo "the value is either 1 or 2";
        break;
}

Vấn đề là cả hai phương pháp là không hiệu quả khi đối phó với trường hợp lớn ... tưởng tượng 1đến 100điều này sẽ làm việc một cách hoàn hảo

$r1 = range(1, 100);
$r2 = range(100, 200);
$v = 76;
switch (true) {
    case in_array($v, $r1) :
        echo 'the value is in range 1 to 100';
        break;
    case in_array($v, $r2) :
        echo 'the value is in range 100 to 200';
        break;
}

58

Tôi sẽ không đăng lại các câu trả lời khác vì tất cả đều đúng, nhưng tôi sẽ chỉ thêm rằng bạn không thể sử dụng chuyển đổi cho các câu lệnh "phức tạp" hơn, ví dụ: để kiểm tra xem giá trị có "lớn hơn 3" không, " trong khoảng từ 4 đến 6 ", v.v ... Nếu bạn cần làm điều gì đó tương tự, hãy sử dụng các ifcâu lệnh hoặc nếu có nhu cầu đặc biệt mạnh mẽ switchthì có thể sử dụng nó trở lại trước:

switch (true) {
    case ($value > 3) :
        // value is greater than 3
    break;
    case ($value >= 4 && $value <= 6) :
        // value is between 4 and 6
    break;
}

nhưng như tôi đã nói, cá nhân tôi sử dụng một iftuyên bố ở đó.


1
Vui mừng khi thấy rằng bạn đã đề xuất nếu () over switch () trong trường hợp này. Loại chuyển đổi này chỉ thêm phức tạp, IMO.
moo

1
vâng, bạn phải có một lý do khá thuyết phục để chọn phong cách này, nhưng thật tốt khi biết rằng nó có thể.
nickf

2
Tôi thực sự vui mừng vì đã học được điều này. Mỗi lần tôi xây dựng một dự án bằng ngôn ngữ Basic-y, tôi lại nhớ có phong cách C switch()và khi tôi làm việc theo ngôn ngữ C-ish tôi thực sự rất nhớ Select Case, đó thực sự là một cách nói ngắn gọn "có một điều lớn khối if, other if, other-if ... here ".
Stan Rogers

5
you can't use switch for more "complicated" statementsLà nó can'thay là nó shouldn't? bởi vì trong ví dụ của bạn, bạncan
Sharky

@Sharky có nghĩa là trường hợp sử dụng thông thường của chuyển đổi không thể. loại switch (true)điều này không phải là một trường hợp sử dụng thông thường của chuyển đổi.
Chen Li Yong

37

Hãy thử với các ví dụ sau trong bài viết này: http://phpswitch.com/

Các trường hợp chuyển đổi có thể:

(Tôi). Một tuyên bố chuyển đổi đơn giản

Các tuyên bố chuyển đổi là tuyệt vời và ma thuật. Đó là một phần của ngôn ngữ cho phép bạn chọn giữa các tùy chọn khác nhau cho một giá trị và chạy các đoạn mã khác nhau tùy thuộc vào giá trị nào được đặt.

Mỗi tùy chọn có thể được đưa ra bởi một trường hợp trong câu lệnh switch.

Thí dụ :

switch($bar)
{
    case 4:
        echo "This is not the number you're looking for.\n";
        $foo = 92;
}

(ii). Phân định khối mã

Nhắc nhở chính của chuyển đổi là mỗi trường hợp sẽ chạy vào trường hợp tiếp theo, trừ khi bạn dừng nó với phá vỡ. Nếu trường hợp đơn giản ở trên được mở rộng để bao gồm trường hợp 5:

Thí dụ :

case 4:
    echo "This is not the number you're looking for.\n";
    $foo = 92;
    break;

case 5:
    echo "A copy of Ringworld is on its way to you!\n";
    $foo = 34;
    break;

(iii). Sử dụng dự phòng cho nhiều trường hợp

Vì công tắc sẽ tiếp tục chạy mã cho đến khi tìm thấy sự cố, nên đủ dễ dàng để có khái niệm về sự sụp đổ và chạy cùng một mã cho nhiều trường hợp:

Thí dụ :

trường hợp 2:

case 3:
case 4:
    echo "This is not the number you're looking for.\n";
    $foo = 92;
    break;

case 5:
    echo "A copy of Ringworld is on its way to you!\n";
    $foo = 34;
    break;

(iv). Chuyển đổi nâng cao: Trường hợp điều kiện

Công tắc của PHP không chỉ cho phép bạn bật giá trị của một biến cụ thể: bạn có thể sử dụng bất kỳ biểu thức nào như một trong các trường hợp, miễn là nó mang lại giá trị cho trường hợp sử dụng. Ví dụ, đây là một trình xác nhận đơn giản được viết bằng cách sử dụng chuyển đổi:

Thí dụ :

switch(true)
{
    case (strlen($foo) > 30):
        $error = "The value provided is too long.";
    $valid = false;
    break;

    case (!preg_match('/^[A-Z0-9]+$/i', $foo)):
        $error = "The value must be alphanumeric.";
    $valid = false;
    break;

    default:
    $valid = true;
    break;
}

Tôi nghĩ rằng điều này có thể giúp bạn giải quyết vấn đề của bạn.


Bạn có trường hợp sử dụng trong thế giới thực nào cho ví dụ (iv) không?
Pedro Moreira

15

Thử

switch($value) {
    case 1:
    case 2:
        echo "the value is either 1 or 2";
        break;
}

9

Tôi khuyên bạn nên truy cập http://php.net/manual/en/control-strucenses.switch.php (thủ công)

switch ($your_variable)
{
    case 1:
    case 2:
        echo "the value is either 1 or 2.";
    break;
}

giải trình

Giống như đối với giá trị bạn phải thực thi câu lệnh đơn lẻ, bạn có thể đặt nó mà không bị ngắt như cho đến khi hoặc trừ khi tìm thấy ngắt, nó sẽ tiếp tục thực thi mã và nếu ngắt tìm thấy nó sẽ ra khỏi trường hợp chuyển đổi.


1

sử dụng mã này:

switch($a) {
case 1:
case 2:
    .......
    .......
    .......
    break;
}

khối gọi cho cả 1 và 2.


1
switch ($value) 
{
   case 1:
   case 2:
      echo 'the value is either 1 or 2';
   break;
}


-4

Cách tốt nhất có thể là nếu khác với yêu cầu. Ngoài ra, điều này có thể dễ dàng và rõ ràng hơn để sử dụng.

Thí dụ:

<?php 
$go = $_REQUEST['go'];
?>
<?php if ($go == 'general_information'){?>
<div>
echo "hello";
}?>

Thay vì sử dụng các hàm không hoạt động tốt với PHP, đặc biệt là khi bạn có PHP bằng HTML.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.