如何迭代多维数组并计算php中每一行的总和?
How to iterate multi dimensional array and calculate sum for each row in php?
我有这个数组,我从数据库中检索数据并将其放入一个数组中:
$query = "select * from caseunder";
$result=mysql_query($query) or die('Error, insert query failed');
$array[] = array();
$numrows=mysql_num_rows($result);
WHILE ($i < $numrows){
$allergies =mysql_result($result, $i, "allergies");
$vege = mysql_result($result,$i, "vege");
$age = mysql_result($result, $i, "age");
$bmi =mysql_result($result, $i, "bmi");
$solution = mysql_result($result,$i, "solution");
$bmi2 = $_POST['weight'] / (($_POST['height']/100)*($_POST['height']/100));
if($_POST['age']>18 && $_POST['age']<35)
$age2 = 'young ';
if($_POST['age']>40 && $_POST['age']<50)
$age2 = 'middle age ';
if($_POST['age']>60)
$age2 = 'old men ';
$array[] = array('age'=>$age2,'allergies'=>$allergies,'vege'=>$vege,'bmi'=>$bmi2,'solution'=>$solution);
i++
}
然后,我想将该数组中的每个元素与我输入的输入进行比较,并计算数组每一行的总和:
foreach($array as $cases) {
if($cases['allergies'] == $_POST['allergies']){
$count = 1;
}
if($cases['vege'] == $_POST['vege']){
$count1 = 1;
}
if($cases['bmi'] == $bmi2)
$count2 = 1;
if($cases['age'] == $age2)
$count3 = 1;
$sum = $count + $count1 + $count2 + $count3;
echo $sum;
}
假设我输入了年龄、体重指数、过敏和蔬菜,它们都与数据库的第一行相同,应该输出的总和是 4,因为 4 个相同的数据比较。在我尝试的这种情况下,数据库的每一行都应该有不同的总和,因为它不是全部 same.But 我没有得到我想要的输出,这是错误输出的例子:
0
4
4
4
4
4
4
4
4
(假设我的 phpmyadmin 中有 8 行数据库)
手动比较后数据库的第一行总和为 4,但当它继续循环时,下一行似乎与上一行的数量相同。
这是错误的:
foreach($array as $array)
您获取名为 $array
的多维数组,并迭代其中的每个项目,该项目也分配给 $array
。这是在要求奇怪的行为。使用不同的变量。数组变量没有被命名为$array
.
当你执行这个循环时:
foreach($array as $cases) {
if($cases['allergies'] == $_POST['allergies']){
$count = 1;
}
if($cases['vege'] == $_POST['vege']){
$count1 = 1;
}
if($cases['bmi'] == $bmi2)
$count2 = 1;
if($cases['age'] == $age2)
$count3 = 1;
$sum = $count + $count1 + $count2 + $count3;
echo $sum;
}
您没有在迭代之间重置 $count
、$count1
等变量。这就是为什么
when it continue looping the next row take the same amount as prev
row.
我会说你可能甚至不需要这些单独的变量,除非你将它们用于问题中未包含的其他内容。您可以将每次重复的总和初始化为零,如果条件匹配则直接递增。
foreach($array as $cases) {
$sum = 0;
if($cases['allergies'] == $_POST['allergies']){
$sum++;
}
if($cases['vege'] == $_POST['vege']){
$sum++;
}
if($cases['bmi'] == $bmi2) {
$sum++;
}
if($cases['age'] == $age2) {
$sum++;
}
echo $sum;
}
顺便说一句,您在第一个循环中设置 bmi 和 age 的方式似乎会使这些值始终匹配。我不确定这是否是您想要的,但似乎不太可能。
// Start variable sum
$sum = 0:
// For each $_POST[] in array
foreach($_POST as $key => $value){
// If Key in $_POST exists add sum
if(array_key_exists($key,$array)){
++$sum;
}
}
echo $sum;
我有这个数组,我从数据库中检索数据并将其放入一个数组中:
$query = "select * from caseunder";
$result=mysql_query($query) or die('Error, insert query failed');
$array[] = array();
$numrows=mysql_num_rows($result);
WHILE ($i < $numrows){
$allergies =mysql_result($result, $i, "allergies");
$vege = mysql_result($result,$i, "vege");
$age = mysql_result($result, $i, "age");
$bmi =mysql_result($result, $i, "bmi");
$solution = mysql_result($result,$i, "solution");
$bmi2 = $_POST['weight'] / (($_POST['height']/100)*($_POST['height']/100));
if($_POST['age']>18 && $_POST['age']<35)
$age2 = 'young ';
if($_POST['age']>40 && $_POST['age']<50)
$age2 = 'middle age ';
if($_POST['age']>60)
$age2 = 'old men ';
$array[] = array('age'=>$age2,'allergies'=>$allergies,'vege'=>$vege,'bmi'=>$bmi2,'solution'=>$solution);
i++
}
然后,我想将该数组中的每个元素与我输入的输入进行比较,并计算数组每一行的总和:
foreach($array as $cases) {
if($cases['allergies'] == $_POST['allergies']){
$count = 1;
}
if($cases['vege'] == $_POST['vege']){
$count1 = 1;
}
if($cases['bmi'] == $bmi2)
$count2 = 1;
if($cases['age'] == $age2)
$count3 = 1;
$sum = $count + $count1 + $count2 + $count3;
echo $sum;
}
假设我输入了年龄、体重指数、过敏和蔬菜,它们都与数据库的第一行相同,应该输出的总和是 4,因为 4 个相同的数据比较。在我尝试的这种情况下,数据库的每一行都应该有不同的总和,因为它不是全部 same.But 我没有得到我想要的输出,这是错误输出的例子:
0
4
4
4
4
4
4
4
4
(假设我的 phpmyadmin 中有 8 行数据库) 手动比较后数据库的第一行总和为 4,但当它继续循环时,下一行似乎与上一行的数量相同。
这是错误的:
foreach($array as $array)
您获取名为 $array
的多维数组,并迭代其中的每个项目,该项目也分配给 $array
。这是在要求奇怪的行为。使用不同的变量。数组变量没有被命名为$array
.
当你执行这个循环时:
foreach($array as $cases) {
if($cases['allergies'] == $_POST['allergies']){
$count = 1;
}
if($cases['vege'] == $_POST['vege']){
$count1 = 1;
}
if($cases['bmi'] == $bmi2)
$count2 = 1;
if($cases['age'] == $age2)
$count3 = 1;
$sum = $count + $count1 + $count2 + $count3;
echo $sum;
}
您没有在迭代之间重置 $count
、$count1
等变量。这就是为什么
when it continue looping the next row take the same amount as prev row.
我会说你可能甚至不需要这些单独的变量,除非你将它们用于问题中未包含的其他内容。您可以将每次重复的总和初始化为零,如果条件匹配则直接递增。
foreach($array as $cases) {
$sum = 0;
if($cases['allergies'] == $_POST['allergies']){
$sum++;
}
if($cases['vege'] == $_POST['vege']){
$sum++;
}
if($cases['bmi'] == $bmi2) {
$sum++;
}
if($cases['age'] == $age2) {
$sum++;
}
echo $sum;
}
顺便说一句,您在第一个循环中设置 bmi 和 age 的方式似乎会使这些值始终匹配。我不确定这是否是您想要的,但似乎不太可能。
// Start variable sum
$sum = 0:
// For each $_POST[] in array
foreach($_POST as $key => $value){
// If Key in $_POST exists add sum
if(array_key_exists($key,$array)){
++$sum;
}
}
echo $sum;