цикл foreach с оператором if - PullRequest
0 голосов
/ 07 марта 2012

Я выполняю запрос, чтобы иметь два столбца в 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 ]

1 голос
/ 07 марта 2012

Просто удалите цикл 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 )
0 голосов
/ 07 марта 2012

Упростите это с падением:

<?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";
    }
}
0 голосов
/ 07 марта 2012

вы должны исправить ваши условия. например, оценка 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...