您能否帮助我找到在数组上放置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()提供了无效的参数”,它是“返回$ totalvitccups;”。
$ curRes ['mgc1cup']是从数据库中提取的数据。
我已经尝试了两天能想到的一切,但仍然无法正常工作。
因此,我有一个名为foodname []的数组。我需要仔细检查每个提交的食物名称,如果有,请根据选择的份量对它进行计算,然后将结果粘贴到一个数组中,我将其命名为vitc(克)和vitcc(杯) 。
我对所有内容都做了一个var_dump,并将其放在代码中的几个位置,但没有显示任何内容。我得到的唯一错误是参数无效,这对我没有多大帮助。
那么,如何在switch语句的每种情况下进行每次计算并将其添加到数组中呢?因为有了数组后,我会将数组中的所有值加在一起以获得总数。问题在于获取数组。
整个代码很长,但是如果您想看的话,就在这里。字段形式可以从1-20个字段中获取食物名称(使用JavaScript动态填充)。
如果您需要在启用javascript的情况下查看它,请在此处(输入“ hello”)。
我的编码不是很好。我读了3本关于php的书,并完成了2篇有关php的在线课程,但是当我坐下来编写代码时,我遇到了一些主要问题,无法完成我想做的事情。但是我一直在努力,在努力。但是这次我真的很困。
首先,
$vitc = array();
&
$vitcc = array();
两者都需要在您的foreach之外(上面),否则它们将在每次迭代时重新创建,并且只包含最后一个值。
其次,关于您遇到的错误,
return $totalvitcgrams;
&
return $totalvitccups;
这两个都还需要在foreach循环之外(如下)
并记住您使用的变量名,正如@ Sumurai8在评论中所说,您使用了错误的变量名$values
vs$value
另外,您需要删除
return $vitc;
&
return $vitcc;
从切换结束。
您还可以非常简单地通过执行以下操作来简化此操作:
$vitc = array();
foreach($_POST['foodnames'] as $value){
$vitc[] = $curRes['mcg100g'] / (100 / $value);
}
不需要像这样的switch语句。
或者在您的<option>
标签中仅提供正确的值。该值不必与选项的文本匹配。这也将减轻对此类繁琐切换的需求,并使您只需要简单的foreach循环即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句