foreach循环使用if语句

时间:2012-03-06 22:23:00

标签: php mysql if-statement foreach

我正在运行一个查询,在html表中有两列。

 c.course_unit  
 m.score

在m.score列中,我想做一个if语句,以便根据得分的某个范围授予一个点。例如

if ($row['m.score']  >= 70) {
point = 5;
 }

然后使用每行授予的每个点乘以另一列中的相应值,即(c.course_unit)。

到目前为止,我已经能够提出这个问题了,而且它并不是关闭它的。

我非常感谢你真诚的帮助。 谢谢。

$grade_point = 0 ;
while ($row =mysql_fetch_assoc($query)) {
    foreach ($row as $value) {
        if ($value >= 70) {
            $value['m.score'] = 5;
        }
        if ( $value['m.score'] >= 60 && $value['m.score']<= 69 ) {
            $value['m.score'] = 4;
        }
        if ( $value['m.score'] >= 50 && $value['m.score']<= 59 ) {
            $value['m.score'] = 3;
        }
        if ( $value['m.score'] >= 45 && $value['m.score']<= 49 ) {
            $value['m.score'] = 2;
        }
        if ( $value['m.score'] >=40 && $value['m.score']<= 45 ) {
            $value['m.score'] = 1;
        }
        if ($value['m.score'] < 40) {
            $value['m.score'] = 0;
        }

        $grade_point += $value['m.score'] * $value['c.course_unit'];
        echo "$grade_point";
    }
}

3 个答案:

答案 0 :(得分:1)

只需删除foreach循环即可。它遍历你的领域。

以下是应该有效的完整代码。我还更改了一些变量名来修复它。

$grade_point = 0;
while ($row8 = mysql_fetch_assoc($query8)) {
    $marks = intval($row8['score']);
    if ($marks >= 70) {
        $score = 5;
    } elseif ($marks >= 60) {
        $score = 4;
    } elseif ($marks >= 50) {
        $score = 3;
    } elseif ($marks >= 45) {
        $score = 2;
    } elseif ($marks >= 40) {
        $score = 1;
    } else{
        $score = 0;
    }
    $grade_point+= $score * intval($row8['course_unit']);
    echo $grade_point;
}

注意。

  1. 对于得分1,范围应该是40到44(不是45),包括在内。
  2. MySql结果在结果集中不包含表别名。所以没有'm.score'它只是简单的'得分'。 (感谢zerkms
  3. 可以减少使用elseif代码。 (感谢zerkms

答案 1 :(得分:0)

你应该修好你的条件。例如,如果条件为:

,则得分为45
if  ( $value['m.score'] >= 45  && $value['m.score']<= 49 ){
            $value['m.score'] = 2 ;}
if  ( $value['m.score'] >=40   && $value['m.score']<= 45 ){
            $value['m.score'] = 1 ;}

另外,你的第一个条件没有关键...只是$ value而不是$ value ['m.score']

...因为你正在使用$ value ['m.score']存储你的观点......最后一个条件总是如此。你的m.score最终总是0

答案 2 :(得分:0)

通过简化来简化它:

<?php 

$grade_point = 0 ;
while ($row =mysql_fetch_assoc($query)) {
    foreach ($row as $value) {
        $mscore = $value['m.score'];
        $res;

        if ( $mscore < 40) {
            $res = 0;
        }
        if ( $mscore <= 45 ) {
            $res = 1;
        }
        if ( $mscore <= 49 ) {
            $res = 2;
        }  
        if ( $mscore <= 59 ) {
            $res = 3;
        }
        if ( $mscore <= 69 ) {
            $res = 4;
        }
        if ($mscore >= 70) {
            $res = 5;
        }

        $grade_point += $res * $value['c.course_unit'];
        echo "$grade_point";
    }
}