วิธีใช้ตัวเรือนสวิตช์ 'หรือ' ใน PHP


คำตอบ:


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

สิ่งนี้เรียกว่า "การตกลงมา" บล็อกเคส คำนี้มีอยู่ในภาษาส่วนใหญ่ที่ใช้คำสั่ง switch


135

หากคุณต้องใช้||ด้วยswitchคุณสามารถลอง:

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

หากไม่ใช่โซลูชันที่คุณต้องการ

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

ปัญหาคือว่าทั้งสองวิธีไม่มีประสิทธิภาพเมื่อจัดการกับกรณีที่มีขนาดใหญ่ ... ลองจินตนาการ1ถึง100สิ่งนี้จะทำงานได้อย่างสมบูรณ์แบบ

$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

ฉันจะไม่โพสต์คำตอบอื่น ๆ เพราะพวกเขาทั้งหมดถูกต้อง แต่ฉันแค่เพิ่มว่าคุณไม่สามารถใช้สวิตช์สำหรับคำสั่ง "ซับซ้อน" เพิ่มเติมเช่นเพื่อทดสอบว่าค่าเป็น "มากกว่า 3" หรือไม่ ระหว่าง 4 ถึง 6 "ฯลฯ หากคุณต้องการทำอะไรเช่นนั้นให้ใช้ifคำสั่งหรือถ้ามีความต้องการที่แข็งแกร่งเป็นพิเศษswitchคุณสามารถใช้มันกลับไปข้างหน้าได้:

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

แต่อย่างที่ฉันพูดฉันจะใช้ifข้อความที่นั่น


1
ดีใจที่เห็นว่าคุณแนะนำถ้า () มากกว่าสวิตช์ () ในกรณีนี้ สวิตช์ชนิดนี้เพิ่มความซับซ้อน IMO
หมู่

1
ใช่คุณต้องมีเหตุผลที่น่าสนใจพอสมควรในการเลือกสไตล์นี้ แต่ก็เป็นเรื่องดีที่รู้ว่าเป็นไปได้
nickf

2
ฉันดีใจจริง ๆ ที่ได้เรียนรู้สิ่งนี้ ทุกครั้งที่ฉันสร้างโครงการในภาษา Basic-y ฉันคิดถึงการมีสไตล์ C switch()และเมื่อฉันทำงานในภาษา C-ish ที่ฉันคิดถึงจริงๆSelect Caseซึ่งเป็นวิธีจดชวเลขอย่างแท้จริง "มีขนาดใหญ่ บล็อกของถ้าอื่นถ้าอื่น - ถ้า ... ที่นี่ "
Stan Rogers

5
you can't use switch for more "complicated" statementsมันcan'tหรือมันคือshouldn'tอะไร? เพราะในตัวอย่างของคุณคุณcan
Sharky

@Sharky เขาหมายถึงกรณีที่สวิตช์ธรรมดาไม่สามารถใช้งานได้ สิ่งชนิดswitch (true)นี้ไม่ใช่กรณีการใช้งานปกติของสวิตช์
เฉินหลี่ยง

37

ลองด้วยตัวอย่างต่อไปนี้ในบทความนี้: http://phpswitch.com/

กรณีสวิตช์ที่เป็นไปได้:

(ผม). คำสั่งเปลี่ยนง่าย

คำสั่งเปลี่ยนเป็นมหัศจรรย์และมหัศจรรย์ เป็นส่วนหนึ่งของภาษาที่ให้คุณเลือกระหว่างตัวเลือกที่แตกต่างกันสำหรับค่าและเรียกใช้ส่วนต่าง ๆ ของรหัสตามค่าที่ตั้งไว้

แต่ละตัวเลือกที่เป็นไปได้จะได้รับจากกรณีในงบสลับ

ตัวอย่าง:

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

(ii) การย่อบล็อกโค้ด

ข้อสังเกตที่สำคัญของการสลับคือแต่ละกรณีจะทำงานต่อไปในกรณีต่อไปเว้นแต่คุณจะหยุดพัก หากเคสธรรมดาด้านบนถูกขยายเป็นเคส 5:

ตัวอย่าง:

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;

(สาม). การใช้ทางเลือกหลายกรณี

เนื่องจากสวิตช์จะยังคงใช้งานรหัสจนกว่าจะพบการหยุดพักจึงเป็นเรื่องง่ายพอที่จะใช้แนวคิดเรื่องการตกหล่นและเรียกใช้รหัสเดิมมากกว่าหนึ่งกรณี:

ตัวอย่าง:

กรณีที่ 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) การสลับขั้นสูง: กรณีเงื่อนไข

การสลับของ PHP ไม่เพียง แต่อนุญาตให้คุณเปลี่ยนค่าของตัวแปรเฉพาะ: คุณสามารถใช้นิพจน์ใด ๆ ก็ได้ในกรณีใดกรณีหนึ่งตราบใดที่มันมีค่าสำหรับกรณีที่จะใช้ ตัวอย่างเช่นต่อไปนี้เป็นเครื่องมือตรวจสอบอย่างง่ายที่เขียนโดยใช้สวิตช์:

ตัวอย่าง:

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;
}

ฉันคิดว่านี่อาจช่วยคุณแก้ปัญหาของคุณได้


คุณมีตัวอย่างการใช้งานจริง (iv) หรือไม่?
Pedro Moreira


9

ฉันแนะนำให้คุณอ่าน http://php.net/manual/en/control-structures.switch.php (ด้วยตนเอง)

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

คำอธิบาย

เช่นเดียวกับค่าที่คุณใช้ในการรันคำสั่งเดี่ยวคุณสามารถใส่มันได้โดยไม่ต้องหยุดพักเป็นจนกว่าหรือจนกว่าจะพบว่ามีการหยุดพักมันจะทำการรันโค้ดและหากพบว่ามีการหยุดพัก


1

ใช้รหัสนี้:

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

บล็อกเรียกทั้ง 1 และ 2




-4

วิธีที่ดีที่สุดคือถ้ามีการร้องขอ นอกจากนี้ยังสามารถใช้งานได้ง่ายและชัดเจน

ตัวอย่าง:

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

แทนที่จะใช้ฟังก์ชั่นที่ใช้งานไม่ได้กับ PHP โดยเฉพาะเมื่อคุณมี PHP เป็น HTML

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.