我在数据库中有各种产品,每种产品都有自己的价格,输出产品价格的模式是:
$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
的东西意味着我在代码中有一些静态内容)。
回声线应为:
如果价格
0
--><span class="free">Free</span>
如果价格
> 0
-->回声$
符号+价格$product[i]["price"]
默认/回退 --> 不回显任何内容
如果
type
special
,无论价格如何-->EchoIt'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 语句没有问题,案例如此之少