如何使用开关/外壳功能(如果有的话)



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

$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 --> <span class="free">Free</span>

  2. 如果价格> 0-->回声$符号+价格$product[i]["price"]

  3. 默认/回退 --> 不回显任何内容

  4. 如果type special,无论价格如何-->Echo It's special

直观地说,这听起来像是用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)`
...

我假设价格永远不会小于零.
因此,似乎只有三个输出选项:"特殊","免费"或"价格"。

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

这是一个工作示例。

<小时 />

编辑

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

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

工作示例

你用错了开关语句,我肯定知道。

你不能使用这样的开关。 现在,switch 语句正在评估 $product[i]["price"] 的值,该值永远不会$product[i]["shipping"]=="0"

我认为你能做的是:

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 语句没有问题,案例如此之少

最新更新