我在数组中保存了某些范围,其中索引为[3],折扣类型为索引[4](%,已修复)。
在这些范围内购买的任何人都应该获得折扣。
我的当前问题是数组的范围可以是任何计数,例如,在变量$a
中,有4 nested array
,但在某些情况下,我会创建6 nested array
或{ {1}},依此类推。
所以,我在switch语句中运行循环,我收到错误8 nested array
。
这是我的代码: -
Parse error: syntax error, unexpected 'for' (T_FOR), expecting case (T_CASE) or default (T_DEFAULT) or '}'
我应该如何为上述场景设计我的算法。
注意:数组类型: -
<?php
$a = array(array('0', '10', '200', '0'), array('11', '20', '20', '1'), array('20', '50', '25', '1'), array('50', '100', '5000', '0'));
$quantity = 25;
$count = count($a);
switch($quantity) {
for($i=0;$<=$count-1;$i++) {
case ($quantity > $a[$i][0] && $quantity < $a[$i][1]) :
echo "Discount Available for Quantity > ".$a[$i][0]." and < ".$a[$i][1];
break;
}
default:
echo 'No Discount';
break;
}
?>
折扣类型为$variable = array ("lowest_quantity_range", "highest_quantity_range", "discount_value", "discount_type");
的{{1}}或1
金额的%
答案 0 :(得分:3)
你不能在switch语句中使用for循环。您需要将for循环放在switch语句之外:
<?php
$a = array(array('0', '10', '200', '0'), array('11', '20', '20', '1'), array('20', '50', '25', '1'), array('50', '100', '5000', '0'));
$quantity = 25;
$count = count($a);
foreach($a as $item) {
switch($quantity) {
case ($quantity >$item[0] && $quantity < $item[1]) :
echo "Discount Available for Quantity > ".$item[0]." and < ".$item[1];
break;
default:
echo 'No Discount';
break;
}
}
?>
答案 1 :(得分:0)
看起来你根本就不应该使用开关......
$a = array(
array('0', '10', '200', '0'),
array('11', '20', '20', '1'),
array('20', '50', '25', '1'),
array('50', '100', '5000', '0')
);
$quantity = 25;
$found = false;
foreach ($a as $item)
{
if ($quantity >$item[0] && $quantity < $item[1])
{
echo "Discount Available for Quantity > ".$item[0]." and < ".$item[1];
print_r($item);
$found = true;
}
}
if (!$found)
{
echo "No Discounts";
}
答案 2 :(得分:0)
示例for
- 在switch
语句中循环:
if( isset( $_POST[ "action" ] ) ) {
$action = $_POST[ "action" ];
switch ( $action ) {
case "add" : addItem(); break;
case "del" : delItem(); break;
case "undo" : for(
$i = 0;
$i <= 10;
$i ++ ) {
switch ( $_SESSION[ "id" ] ) {
case $i : undoAction( $i ); break;
}
}
$_SESSION = array();
break;
}
}
我记得我做过的一个脚本,所以我抓住了它。确保在for
定义后开始case
- 循环。在此示例中,它"undo":
...通常for
- 循环以function
或方法打包,以使其更加干净。
您无法为for
语句中的新case
启动switch
- 循环。