PHP'de 'veya' anahtar kutusu nasıl kullanılır


230

PHP anahtarında 'VEYA' operatör veya eşdeğeri kullanmanın bir yolu var mı?

Örneğin, böyle bir şey:

switch ($value) {

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

Yanıtlar:


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

Buna vaka bloğunun “üzerinden geçme” denir. Terim, bir anahtar deyimi uygulayan çoğu dilde mevcuttur.


135

Eğer kullanmanız gerekiyorsa ||ile switcho zaman deneyebilirsiniz:

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

Değilse tercih ettiğiniz çözüm

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

Sorun hayal ... büyük vakalarda ile uğraşırken hem yöntem verimli olmadığıdır 1için 100bu mükemmel çalışacak

$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

Diğer cevapları tekrar göndermeyeceğim, çünkü hepsi doğru, ancak sadece daha "karmaşık" ifadeler için anahtarı kullanamayacağınızı ekleyeceğim, örneğin: bir değerin "3'ten büyük" olup olmadığını test etmek için, " Böyle bir şey yapmanız gerekiyorsa, ififadeleri kullanmaya devam edin veya özellikle güçlü bir ihtiyaç switchvarsa, bunu öne doğru kullanmak mümkündür:

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

ama dediğim gibi, iforada şahsen bir ifade kullanırdım .


1
Bu durumda () over switch () öğesini önerdiğinize sevindik. Bu tür bir anahtar sadece karmaşıklık ekler, IMO.
moo

1
evet, bu stili seçmek için oldukça zorlayıcı bir nedeniniz olmalı, ancak bunun mümkün olduğunu bilmek güzel.
nickf

2
Aslında bunu öğrendiğim için mutluyum. Her Temel-y dilinde bir proje yaptığımda C stiline sahip olmayı özlüyorum switch()ve bir C-ish dilinde çalışırken gerçekten sahip olmayı özlüyorum Select Case, bu gerçekten çok büyük bir " if bloğu, else if, else-if ... burada ".
Stan Rogers

5
you can't use switch for more "complicated" statementsöyle can'tya o shouldn't? çünkü örneğinizdecan
Sharky

@Sharky, anahtarın normal kullanım durumunun yapamayacağı anlamına geliyordu. bu tür bir switch (true)şey, anahtarın sıradan bir kullanım durumu değildir.
Chen Li Yong

37

Bu makalede aşağıdaki örnekleri deneyin: http://phpswitch.com/

Olası Anahtar Kutuları:

(ben). Basit bir anahtar bildirimi

Anahtar ifadesi harika ve sihirlidir. Bir değer için farklı seçenekler arasında seçim yapmanıza ve ayarlanan değere bağlı olarak farklı kod parçaları çalıştırmanıza olanak tanıyan bir dil parçasıdır.

Her olası seçenek, switch deyimindeki bir vaka tarafından verilir.

Misal :

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

(ii). Kod bloklarını sınırlama

Anahtarın en büyük uyarısı, mola vermedikçe her bir vakanın bir sonrakine geçeceğidir. Yukarıdaki basit kasa, kasa 5'i kapsayacak şekilde genişletilirse:

Misal :

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). Birden çok vaka için geçiş özelliğini kullanma

Anahtar, bir mola bulana kadar kod çalıştırmaya devam edeceğinden, geçiş kavramını almak ve aynı kodu birden fazla vaka için çalıştırmak yeterince kolaydır:

Misal :

durum 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). Gelişmiş anahtarlama: Durum durumları

PHP'nin anahtarı sadece belirli bir değişkenin değerini açmanıza izin vermez: durum için bir değer verdiği sürece herhangi bir ifadeyi vakalardan biri olarak kullanabilirsiniz. Örnek olarak, switch kullanılarak yazılmış basit bir doğrulayıcı:

Misal :

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

Bence bu sorununuzu çözmenize yardımcı olabilir.


Örnek (iv) için gerçek bir dünya kullanım durumunuz var mı?
Pedro Moreira

15

Deneyin

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

9

Http://php.net/manual/en/control-structures.switch.php (manuel) 'dan geçmenizi öneririm

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

açıklama

Değeri gibi tek bir deyimi yürütmek için ne gibi sonu olsun ya da olmadığı sürece bu kodu yürütmek devam edecek gibi bir kesinti olmadan koyabilirsiniz ve break bulundu eğer anahtar durumda çıkacaktır.


1

bu kodu kullan:

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

blok hem 1 hem de 2'yi çağırdı.


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

0

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

$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

En iyi yol istemek başka olabilir. Ayrıca, bu kullanımı daha kolay ve net olabilir.

Misal:

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

PHP ile iyi çalışmayan işlevleri kullanmak yerine, özellikle HTML'de PHP varsa.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.