Cara menggunakan sakelar 'atau' dalam PHP

230

Apakah ada cara menggunakan operator 'ATAU' atau yang setara dalam switch PHP?

Misalnya, sesuatu seperti ini:

switch ($value) {

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

Jawaban:

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

Ini disebut "jatuh" blok kasus. Istilah ini ada dalam sebagian besar bahasa yang menerapkan pernyataan switch.

Komunitas
sumber
135

Jika Anda harus menggunakan ||dengan switchmaka Anda dapat mencoba:

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

Jika tidak, solusi pilihan Anda adalah

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

Masalahnya adalah bahwa metode kedua tidak efisien ketika berhadapan dengan kasus besar ... bayangkan 1untuk 100ini akan bekerja dengan sempurna

$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;
}
Baba
sumber
58

Saya tidak akan memposting ulang jawaban lain karena semuanya benar, tetapi saya hanya akan menambahkan bahwa Anda tidak dapat menggunakan sakelar untuk pernyataan yang lebih "rumit", misalnya: untuk menguji apakah suatu nilai "lebih besar dari 3", " antara 4 dan 6 ", dll. Jika Anda perlu melakukan sesuatu seperti itu, tetap menggunakan ifpernyataan, atau jika ada kebutuhan yang sangat kuat untuk switchmaka mungkin untuk menggunakannya kembali ke depan:

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

tetapi seperti yang saya katakan, saya pribadi akan menggunakan ifpernyataan di sana.

nickf
sumber
1
Senang melihat bahwa Anda merekomendasikan if () over switch () dalam kasus ini. Switch semacam ini hanya menambah kompleksitas, IMO.
moo
1
ya, Anda harus memiliki alasan yang cukup kuat untuk memilih gaya ini, tetapi ada baiknya mengetahui bahwa itu mungkin.
nickf
2
Saya sebenarnya senang telah mempelajari ini. Setiap kali saya membangun sebuah proyek dalam bahasa Basic-y, saya rindu memiliki gaya-C switch(), dan ketika saya bekerja dalam bahasa C-ish saya sangat merindukan memiliki Select Case, yang benar-benar cara cepat untuk mengatakan "ada yang besar blok if, else if, else-if ... here ".
Stan Rogers
5
you can't use switch for more "complicated" statementsapakah itu can'tatau tidak shouldn't? karena dalam contoh Andacan
Sharky
@ Hiarky maksudnya kasus penggunaan switch biasa tidak bisa. hal semacam switch (true)ini bukan kasus penggunaan switch biasa.
Chen Li Yong
37

Coba dengan contoh berikut ini di artikel ini: http://phpswitch.com/

Kemungkinan Beralih Kasus:

(saya). Pernyataan peralihan sederhana

Pernyataan pergantian itu luar biasa dan ajaib. Ini adalah bagian dari bahasa yang memungkinkan Anda memilih di antara opsi yang berbeda untuk suatu nilai, dan menjalankan bagian kode yang berbeda tergantung pada nilai mana yang ditetapkan.

Setiap opsi yang mungkin diberikan oleh case dalam pernyataan switch.

Contoh:

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

(ii). Membatasi blok kode

Peringatan utama saklar adalah bahwa setiap kasing akan beralih ke yang berikutnya, kecuali jika Anda menghentikannya dengan putus. Jika case sederhana di atas diperluas untuk mencakup case 5:

Contoh:

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;

(aku aku aku). Menggunakan fallthrough untuk banyak kasus

Karena switch akan terus menjalankan kode hingga menemukan celah, cukup mudah untuk mengambil konsep fallthrough dan menjalankan kode yang sama untuk lebih dari satu kasus:

Contoh:

kasus 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). Perpindahan tingkat lanjut: Kondisi kondisi

Pergantian PHP tidak hanya memungkinkan Anda untuk mengaktifkan nilai variabel tertentu: Anda dapat menggunakan ekspresi apa pun sebagai salah satu kasus, asalkan memberikan nilai bagi kasus untuk digunakan. Sebagai contoh, inilah validator sederhana yang ditulis menggunakan sakelar:

Contoh:

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

Saya pikir ini dapat membantu Anda untuk menyelesaikan masalah Anda.

John Peter
sumber
Apakah Anda memiliki case-use dunia nyata sebagai contoh (iv)?
Pedro Moreira
15

Mencoba

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

Saya menyarankan Anda untuk membaca http://php.net/manual/en/control-structures.switch.php (manual)

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

penjelasan

Seperti untuk nilai Anda apa yang harus dieksekusi pernyataan tunggal Anda dapat meletakkannya tanpa istirahat karena sampai atau kecuali istirahat ditemukan itu akan terus mengeksekusi kode dan jika istirahat ditemukan itu akan keluar dari switch case.

Abhishek Jaiswal
sumber
1

gunakan kode ini:

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

blok dipanggil untuk 1 dan 2.

RaJeSh
sumber
1
switch ($value) 
{
   case 1:
   case 2:
      echo 'the value is either 1 or 2';
   break;
}
Tapas Pal
sumber
0

Contoh http://php.net/manual/en/control-structures.switch.php

$today = date("D");

    switch($today){

        case "Mon":

        case "Tue":

            echo "Today is Tuesday or Monday. Buy some food.";

            break;

        case "Wed":

            echo "Today is Wednesday. Visit a doctor.";

            break;

        case "Thu":

            echo "Today is Thursday. Repair your car.";

            break;

        default:

            echo "No information available for that day.";

            break;

    }
Md Nazrul Islam
sumber
-4

Cara terbaik mungkin kalau tidak dengan meminta. Juga, ini bisa lebih mudah dan jelas untuk digunakan.

Contoh:

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

Alih-alih menggunakan fungsi yang tidak akan bekerja dengan baik dengan PHP, terutama ketika Anda memiliki PHP dalam HTML.

ahmed
sumber