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

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.


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

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.


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.


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

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.


1

gunakan kode ini:

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

blok dipanggil untuk 1 dan 2.


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

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;

    }

-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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.