$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
- &gt; <span class="free">Free</span>
如果价格为> 0
- &gt; 回声$
标志 +价格$product[i]["price"]
默认情况下/后备 - &gt;不要回应任何事情
如果type
为special
,无论价格是多少 - &gt;回声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)`
...
答案 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;
}
只是为了好玩,使用嵌套ternary运算符的简短版本:
function output($p=0,$t='normal') {
return $t=='special'?"It's Special":($p==0?'<span class="free">Free</span>':'$'.$p);
}
答案 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语句看到一个问题