-4

我有这个数组,我从数据库中检索数据并将其放入数组中:

$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 相同的数据比较。在我尝试的这种情况下,数据库的每一行应该有不同的总和,因为它并不完全相同。但我没有得到我想要的输出,这是错误输出的例子:

0
4
4
4
4
4
4
4
4

(假设我的 phpmyadmin 中有 8 行数据库) 手动比较后的第一行数据库总和为 4,但似乎当它继续循环下一行时,与上一行的数量相同。

4

3 回答 3

0

这是错误的:

foreach($array as $array)

您获取名为 的多维数组,$array并遍历其中的每个项目,该项目也分配给$array。这是要求奇怪的行为。使用不同的变量。数组变量不必命名$array

于 2015-06-19T21:56:46.367 回答
0

当您执行此循环时:

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等变量。这就是为什么

当它继续循环下一行时,取与上一行相同的数量。

我会说你可能甚至不需要这些单独的变量,除非你将它们用于问题中不包含的其他东西。您可以将每次重复的总和初始化为零,然后在条件匹配时直接递增。

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 的方式将使这些值始终匹配。我不确定这是否是您的意图,但这似乎不太可能。

于 2015-06-19T23:15:51.097 回答
0
// 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;
于 2015-06-20T02:09:41.363 回答