2017-09-13 4 views
1

J'ai si les opérateurs avec d'autre déclarationSi l'opérateur autre avec la manière courte

$row["column"] = ($example == "H") ? "first" : "second"; 

je dois ajouter else if état à ce sujet. Besoin d'écrire quelque chose comme le code ci-dessous mais avec ? et :. Vous cherchez un code plus court, est-ce possible?

if($example == "H") 
{ 
    $example = "first"; 
} 
else if($example == "K") 
{ 
    $example = "smth different"; 
} 
else if($example == "X") 
{ 
    $example =" third one"; 
} 
else 
{ 
    $example = "go away"; 
{ 
+3

Le chaînage des opérateurs ternaires est une mauvaise idée. Il devient vite difficile à lire. Qu'en est-il un 'switch'? – Qirel

+2

Yeah 'switch' est le cas d'utilisation parfait ici – Thamaraiselvam

+0

*" J'ai si else statement "* -" '?:' "N'est pas une déclaration, c'est un opérateur. Les opérateurs et les déclarations sont des choses différentes, avec des objectifs différents dans la vie. Ils ne peuvent pas être échangés. – axiac

Répondre

6

Chaînage opérateurs ternaires est pas une bonne idée. Un code plus court ne signifie pas toujours que c'est plus lisible! Si vous utilisez plusieurs opérateurs ternaires l'un dans l'autre, il devient très rapidement illisible.

Utilisez à la place un switch qui vérifie chaque cas.

switch ($example) { 
    case "H": 
     $example = "first"; 
     break; 
    case "K": 
     $example = "smth different"; 
     break; 
    case "X": 
     $example =" third one"; 
     break; 
    default: 
     $example = "go away"; 
} 
+1

Je vois que si j'ai beaucoup d'opérateurs sinon else, il est inutile d'utiliser '? : 'Le meilleur moyen est de passer. Merci!) – Namik

0

vous pouvez simplement les imbriquer:

$row["column"] = ($example == "H") ? "first" : $row["column"] = ($example == "K") ? "smth different" : ...; 

aussi je vous recommande d'utiliser l'interrupteur pas

+0

Cela ne fonctionnera pas non plus, parce que vous devez grouper la condition que vous allez plus profond. – Qirel

+0

Je vois que si j'ai beaucoup d'opérateurs sinon else, il est inutile d'utiliser '? : 'Le meilleur moyen est de passer. Merci!) – Namik

5

Utilisez un associative array:

$map = [ 
    'H' => 'first', 
    'K' => 'smth different', 
    'X' => 'third one', 
]; 

$val = 'go away'; 
if (isset($map[$example])) { 
    $val = $map[$example]; 
} 

echo $val; 

Ou utilisez une instruction switch:

switch ($example) { 
    case 'H': 
    $val = 'first'; 
    break; 
    case 'K': 
    $val = 'smth different'; 
    break; 
    case 'X': 
    $val = 'third one'; 
    break; 
    default: 
    $val = 'go away'; 
    break; 
} 

echo $val; 
+0

Je vois que si j'ai beaucoup d'opérateurs sinon else, il est inutile d'utiliser '? : 'Le meilleur moyen est de passer. Merci!) – Namik

1

Vous pouvez utiliser un sw déclaration de la démangeaison au lieu d'un if/else, exemple:

switch ($example) 
{ 
    case 'A': 
     $example = 'first'; 
     break; 
    case 'B': 
     $example = 'second'; 
     break; 
    default: 
     $example = 'default'; 
} 
+0

Je vois que si j'ai beaucoup d'opérateurs sinon else, il est inutile d'utiliser '? : 'Le meilleur moyen est de passer. Merci!) – Namik