Switch Case 有类似 Ternary 的表达式吗?

Is There any Expression Like Ternary for Switch Case?

我正在尝试使用PHP来识别变量$category,并将其中文名称回显到输入文本区域的值中。

<input type="text" value="<?php ...code...?>"/> 

如果我使用三元运算符,它看起来和 If-Else 语句一样疯狂... $category 变量重复多次。

echo (($category == "vegetable") ? "蔬菜" :
        (($category == "fruit") ? "水果" : 
           (($category == "meat") ? "肉類" :
              (($category == "seafood") ? "海鮮" :
                 (($category == "junkFood") ? "零食" : "")))));

但是,如果我使用 Switch 语句,它会使我的代码变得很长...

switch ($category){
  case "vegetable":
    echo "蔬菜";
    break;
  case "fruit":
    echo "水果";
    break;
  case "meat":
    echo "肉類";
    break;
  case "seafood":
    echo "海鮮";
    break;
  case "junkFood":
    echo "零食";
}

switch 语句是否还有其他三元运算符可以使我的代码更简洁?

或者有没有更好的方法来修改我的代码?

您可以使用像 array('junkFood' => "零食", ...) 这样的数组来使它看起来更干净

例如

$array = ['junkFood' => "零食", 'junkFood2' => "零食"];
echo $array['junkFood'];

您可以创建一个函数,使用返回值的开关:

<input type="text" value="<?php echo translate($category);?>"/> 

<?php
function translate($category) {
   switch ($category){
   case "vegetable": return "蔬菜";
   case "fruit": return "水果";
   // ...
   }
}

您可以使用简单的关联数组:

$your_food = ["vegetable"=>"蔬菜", "fruit"=>"水果","meat"=>"肉類"...];

echo $your_food[$category];

如果你只有key => value "relation",那么用普通数组代替:

$default = '???';
$map = [
    "vegetable" => "蔬菜",
    "fruit" => "水果",
    ...
];

echo array_key_exists($category, $map) ? $map[$category] : $default;