如何使用Switch / Case的功能,如果有的话?

时间:2016-01-20 00:15:33

标签: php function switch-statement

我在数据库里面有各种产品,每个都有自己的价格,输出产品价格的模式是:

$product[i]["price"]

我还有各种“产品类型”,这些产品类型在我的代码中手动定义,每个都有相应的每个产品的索引编号:

$type1="normal"
$type2="normal"
$type3="special"
...

我希望根据每个产品的价格和类型回复消息。

我的代码模式类似于:

<p> lorem <?php echo function_output($product[1]["price"],$type1)?><p>
<p> ipsum <?php echo function_output($product[2]["price"],$type2)?><p>
<p> done <?php echo function_output($product[3]["price"],$type3)?><p>

lorem ipsum填充意味着我在代码中有一些静态内容。

回声线应该是:

  1. 如果价格为0 - &gt; <span class="free">Free</span>

  2. 如果价格为> 0 - &gt; 回声$标志 +价格$product[i]["price"]

  3. 默认情况下/后备 - &gt;不要回应任何事情

  4. 如果typespecial,无论价格是多少 - &gt;回声It's special

  5. 直观地说它听起来像是用switch命令处理的东西,但我真的不知道如何以我想要的方式使用它,这可能涉及一个函数。我只知道switch命令的最基本形式,我假设我的代码应该是这样的:

    $my_text = function_output($product[i]["price"],$type);
    
        switch ($product[i]["price"]) {
    
        case $product[i]["price"]=="0":
            $message = '<span class="free">Free</span>';
            break;
    
        case $product[i]["price"]>"0":
            $message = '$product[i]["price"]';
            break;
    
        case $type1="special":
            $message = 'It's Special';
            break;
    
        default:
            $message = 'no info';
        }
    

    是的,我知道这是一个完整的混乱,但不知道如何做到这一点。

    编辑:

    例如,当$product[i]["price"]=50$type2="normal"

    function_output($product[2]["price"],$type2)应返回:$50

    编辑2:

    基本上我希望函数的使用方式与下面的方法类似:

    function example( $slug ) {
        $class_map = array(
            'special' => 'it's special',
            'default'    => 'nothing'
        );
    
        return ( isset( $class_map[ $slug ] ) ) ? $class_map[ $slug ] : $class_map[ 'default' ];
    }
    

    然后:

    `example( $product[1]["price"],$type1)`
    `example( $product[2]["price"],$type2)`
    ...
    

2 个答案:

答案 0 :(得分:3)

我假设价格永远不会低于零 因此,似乎只有三种输出选项:“特殊”,“免费”或“价格”。

PHP的elseif在这里可能更有效:

function function_output($price=0,$type='normal') {

  if ($type == "special") {
    $message = "It's Special";
  } elseif ($price == 0) {
    $message = '<span class="free">Free</span>';
  } else {
    $message = '$'.$price;
  }

  return $message;

}

但您也可以使用switch通过传递值true来评估多个变量。
如果您将来要添加更多选项,这可能很有用。

function function_output($price=0,$type='normal') {

    switch (true) {
      case $type == "special":
        $message = "It's Special";
        break;
      case $price == 0:
        $message = '<span class="free">Free</span>';
        break;
      default:
        $message = '$'.$price;
    }

    return $message;

}

这是working example

修改

只是为了好玩,使用嵌套ternary运算符的简短版本:

function output($p=0,$t='normal') {
    return $t=='special'?"It's Special":($p==0?'<span class="free">Free</span>':'$'.$p);
}

Working Example

答案 1 :(得分:0)

您正在使用错误的switch语句我肯定知道。

你不能使用这样的开关。现在,switch语句正在评估$ product [i] [&#34; price&#34;]的价值,它永远不会是$ product [i] [&#34; shipping&#34;] ==&#34; 0&#34;

我认为你能做的是:

switch (true) {

    case $product[i]["shipping"]=="0":
        $message = '<span class="free">Free</span>';
        break;

    case $product[i]["price"]>"0":
        $message = '$product[i]["price"]';
        break;

    case $type1="special":
        $message = 'It's Special';
        break;

    default:
        $message = 'no info';
    }

但我个人并没有在这种情况下使用if语句看到一个问题