【发布时间】:2015-02-24 11:36:57
【问题描述】:
能否请您帮我找到正确的语法,将 switch 语句放在数组上,然后在每种情况下,向新数组中添加一个元素。
我有一个 2 步表单(实际上是使用相同 php 文件的 2 个表单)。在第一个表单中,用户输入食物名称,选择是否要使用克或杯作为份量,然后选择每日或每周计算。
一旦提交第一个表格,就会从数据库中检索与他们的食物匹配的食物,并显示在表格 #2 中,食物名称旁边有一个复选框。他们可以取消选择他们不想要的任何匹配项。这一切都很好。
提交第二份表格后,维生素 C 的含量是通过从数据库中提取每种食物中的维生素 C 含量(以克或杯为单位)来计算的。 php 代码根据他们选择的份量计算维生素 C 的量(有许多克数选项和许多杯子选项)。这是我想不通的switch语句。
表格#2是:
<!--START DISPLAY OF FORM 2-->
<div class="step2">
<div class="row">
<h2>Step 2 of 2</h2>
</div>
<div class="row"> <h3>We Found these matching foods. </h3> <ol><li><h4>Uncheck the ones you don't want to include in your calculation.</h4></li><li><h4>Enter your serving size. If daily, enter amount of each food you feed your guinea pig each day. If weekly, enter total amounts that you give him each week.</h4></li><li><h4>Click "Calculate my Vitamin C".</h4></li></ol></div>
<form id="step2" class="form-horizontal" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
<?php if ($servingsize == "grams") {
foreach ($results as $CurRes) {
echo '<div class="row">' . '<div class="col-sm-1">' . '<input type="checkbox" name="foodname[]" ' . 'value="'.$CurRes['name'].'"' . 'checked>'. '</div>' . '<div class="col-sm-2">' .$CurRes['name'] .'</div>' . '<div class="col-sm-9">'; ?>
<fieldset>
<!-- Select Basic -->
<div class="control-group">
<label class="control-label" for="amountg">Amount</label>
<div class="controls">
<select id="amountg" name="amountg[]" class="input-medium">
<option value="10">10g</option>
<option value="20">20g</option>
<option value="30">30g</option>
<option value="40">40g</option>
<option value="50">50g</option>
<option value="60">60g</option>
<option value="70">70g</option>
<option value="80">80g</option>
<option value="90">90g</option>
<option value="100">100g</option>
<option value="110">110g</option>
<option value="120">120g</option>
<option value="130">130g</option>
<option value="140">140g</option>
<option value="150">150g</option>
<option value="160">160g</option>
<option value="170">170g</option>
<option value="180">180g</option>
<option value="190">190g</option>
<option value="200">200g</option>
</select>
</fieldset>
</div><!--end of div class controls-->
</div><!--end of div class control-group-->
</div><!--end of div class-col-sm-9-->
</div><!--end of div class=row-->
<?php } //end of foreach
} else /*end of if servingsize="grams"*/ {
foreach ($results as $CurRes) {
echo '<div class="row">' . '<div class="col-sm-1">' . '<input type="checkbox" name="foodnames[]" ' . 'value="'.$CurRes['name'].'"' . 'checked>'. '</div>' . '<div class="col-sm-2">' .$CurRes['name'] .'</div>' . '<div class="col-sm-9">'; ?>
<fieldset>
<!-- Select Basic -->
<div class="control-group" style="display:inline">
<label class="control-label" for="cups">Amount</label>
<div class="controls" style="display:inline">
<select id="cups" name="cups" class="input-medium">
<option value="1/4">1/4 cup</option>
<option value="1/2">1/2 cup</option>
<option value="3/4">3/4 cup</option>
<option value="1">1 cup</option>
<option value="1 1/4">1 1/4 cups</option>
<option value="1 1/2">1 1/2 cups</option>
<option value="1 3/4">1 3/4 cups</option>
<option value="2">2 cups</option>
<option value="2 1/4">2 1/4 cups</option>
<option value="2 1/2">2 1/2 cups</option>
<option value="2 3/4">2 3/4 cups</option>
<option value="3">3 cups</option>
</select>
</div><!--end of div class controls-->
</div><!--end of div class control-group-->
</div><!--end of div class col-sm-5-->
</div><!--end of div class row-->
</fieldset>
<?php } /*end of foreach*/
} /* end of else - (is cups)*/ ?>
<p><input type="submit" value="Calculate my Vitamin C" name="form2"></p>
</form>
</div><!--end of <div class="step2">-->
<!--END STEP 2-->
switch语句为:
/*GOAL HERE IS: take the amount they selected on the form and convert the mysql results based on serving size. For example, if they selected 50 grams, that's .5 * $curRes['mgc100g']*/
if (isset($_POST['form2'])) {
if ($servingsize == "grams") {
foreach ($_POST['foodname'] as $value) {
$vitc=array();
switch ($value) {
case "10":
$vitc[] = $curRes['mgc100g']/10;
break;
case "20":
$vitc[] = $curRes['mgc100g']/5;
break;
case "30":
$vitc[] = $curRes['mgc100g']/3.3333;
break;
case "40":
$vitc[] = $curRes['mgc100g']/2.5;
break;
case "50":
$vitc[] = $curRes['mgc100g']/2;
break;
case "60":
$vitc[] = $curRes['mgc100g']/1.667;
break;
case "70":
$vitc[] = $curRes['mgc100g']/1.4286;
break;
case "80":
$vitc[] = $curRes['mgc100g']/1.25;
break;
case "90":
$vitc[] = $curRes['mgc100g']/1.1111;
break;
case "100":
$vitc[] = $curRes['mgc100g'];
break;
case "110":
$vitc[] = $curRes['mgc100g']*1.1;
break;
case "120":
$vitc[] = $curRes['mgc100g']*1.2;
break;
case "130":
$vitc[] = $curRes['mgc100g']*1.3;
break;
case "140":
$vitc[] = $curRes['mgc100g']*1.4;
break;
case "150":
$vitc[] = $curRes['mgc100g']*1.5;
break;
case "160":
$vitc[] = $curRes['mgc100g']*1.6;
break;
case "170":
$vitc[] = $curRes['mgc100g']*1.7;
break;
case "180":
$vitc[] = $curRes['mgc100g']*1.8;
break;
case "190":
$vitc[] = $curRes['mgc100g']*1.9;
break;
case "200":
$vitc[] = $curRes['mgc100g']*2;
break;
default:
echo "We couldn't calculate that. Sorry!";
}//end of switch statement
return $vitc;
} //end of foreach loop
} else { //end of if $servingsize == grams
foreach ($_POST['foodnames'] as $values) {
$vitcc = array();
switch ($value) {
case "1/4":
$vitcc[] = $curRes['mgc1cup']/4;
break;
case "1/2":
$vitcc[] = $curRes['mgc1cup']/2;
break;
case "3/4":
$vitcc[] = $curRes['mgc1cup']/1.3333;
break;
case "1":
$vitcc[] = $curRes['mgc1cup'];
break;
case "1 1/4":
$vitcc[] = $curRes['mgc1cup']*1.25;
break;
case "1 1/2":
$vitcc[] = $curRes['mgc1cup']*1.5;
break;
case "1 3/4":
$vitcc[] = $curRes['mgc1cup']*1.75;
break;
case "2":
$vitcc[] = $curRes['mgc1cup']*2;
break;
case "2 1/4":
$vitcc[] = $curRes['mgc1cup']*2.25;
break;
case "2 1/2":
$vitcc[] = $curRes['mgc1cup']*2.5;
break;
case "2 3/4":
$vitcc[] = $curRes['mgc1cup']*2.75;
break;
case "3":
$vitcc[] = $curRes['mgc1cup']*3;
break;
default:
echo "We couldn't calculate that. Sorry!";
}//end of switch statement
return $vitcc;
} //end of foreach loop
} //end of else statement (i.e., $servingsize is cups)
} //end of if isset($_POST('form2'))
/*ADD TOTAL OF VITAMIN C mg*/
if ($_POST['radios'] == "grams") {
foreach ($vitc as $amount) {
$totalvitcgrams = round(array_sum($vitc), 1);
return $totalvitcgrams;
} //end of foreach
} elseif ($_POST['radios'] == "cups") { //end of if $_POST['amountg'] == grams
foreach ($vitcc as $amounts) {
$totalvitccups = round(array_sum($vitcc), 1);
return $totalvitccups;
} //end of foreach
} /* end of elseif ($_POST['amountg'] != grams*/ else {
echo 'An error occurred. Sorry!'; }
//Calculate daily amount of Vitamin c from weekly totals
if ($weekly == "true") {
$weektodaygrams = $totalvitcgrams/7;
$weektodaycups = $totalvitccups/7;
}//end of if $weekly == true
?>
我收到“错误:在第 320 行为 foreach() 提供的参数无效)”,即“return $totalvitccups;”
$curRes['mgc1cup'] 是从数据库中提取的数据。
我已经尝试了两天能想到的所有方法,但仍然无法正常工作。
所以我有一个名为 foodname[] 形式的数组。我需要检查每个提交的食物名称,如果存在,根据选择的份量对其进行计算,然后将结果放入一个数组中,我将其命名为 vitc(克)和 vitcc(杯子) .
我已经对所有内容进行了 var_dump 并将其放在代码中的多个位置,但我没有显示任何内容。我得到的唯一错误是无效参数,这对我没有多大帮助。
那么如何在 switch 语句的每种情况下进行每个计算并将其添加到数组中?因为在我有了数组之后,我会将数组中的所有值相加得到总量。获取数组是个问题。
整个代码很长,但如果你想看,它是here。食物名称的字段形式可以是 1-20 个字段(使用 javascript 动态填充)。
如果您需要在启用 javascript 的情况下查看它,请输入 here(输入“hello”)。
我的编码不是很好。我阅读了 3 本关于 php 的书籍并完成了 2 门关于 php 的在线课程,但是当我坐下来编写代码时,我在做我想做的事情时遇到了很大的问题。但我一直在尝试,尝试和尝试。但这一次我真的被困住了。
【问题讨论】:
-
foreach ($_POST['foodnames'] as $values)$values,在下一行的开关中使用$value -
您也在每次循环迭代时清空 $vitcc 数组。您应该使用查找表将
2 3/4字符串预先转换为浮点数。 -
这个有几个问题,会发布答案来澄清一些
标签: php mysql arrays forms switch-statement