0

我已经使用 phpmysql 开发了学校成绩单应用程序。在评分表中,如果学生在其中一科不及格,他/她将在评分表的结果部分被宣布为“不及格”。我可以用这段代码完美地完成这项工作。

今天学校的校长来找我说今天不用了,让我把代码改成这样:如果一个学生两科不及格,他应该被宣布为“不及格”,但如果他只在一个科目echo“简单”上不及格,如果他通过了所有科目,他应该被宣布为“通过”。我花了很长时间试图弄清楚如何修改我的代码,但我仍然无法提出解决方案。所以,我来这里寻求帮助。任何建议都热烈欢迎。提前非常感谢。这是我的代码:

<?php 

$all = array(41, 55, 56, 39, 29, 47);  //Mark in each subject. Pass mark is 30

// second, just iterate over them till you find one value -30
for($i=0; $i < count($all); $i++){
     if($all[$i] < 30) $sum = 1;
}

echo (!empty($sum)) ? 'Failed' : 'Passed';//'Simple' must be included here, but I still could not find the solution.

?>
4

5 回答 5

1

首先用 0 创建一个初始变量,并在 for 循环中递增它。

$all = array(41, 55, 56, 39, 29, 47);  //Mark in each subject. Pass mark is 30
$sum = 0;
// second, just iterate over them till you find one value -30
for($i=0; $i < count($all); $i++){
    if($all[$i] < 30) $sum++;
}

现在检查这里有多个条件。

if($sum == 0) {
    echo 'passed';
} elseif($sum == 1) {
    echo 'simple';
} else {
    echo 'failed';
}
于 2013-07-25T14:25:50.790 回答
1

只需创建一个计数器以了解失败次数,然后使用不同打印的条件。

<?php 

$all = array(41, 55, 56, 39, 29, 47);  //Mark in each subject. Pass mark is 30

$numFails = 0;

// second, just iterate over them till you find one value -30
for($i=0; $i < count($all); $i++){
     if($all[$i] < 30){
         $numFails++;  //incrementing the number of failatures
     }
}

if($numFails > 1){
    echo "Failed";
}
else if($numFails == 1){
   echo "Simple";
}
else{
   echo "Passed";
}

?>

尝试编写好的代码。尽可能清晰易读。

还要命名具有含义的变量。

于 2013-07-25T14:25:52.043 回答
1
$count = 0;
//define the length outside of the loop - 
//otherwise PHP will call the function count() each iteration 
//which is bad practice performance wise
$length = count($all);

for($i=0; $i < $length; $i++){
     if($all[$i] < 30) ++$count;
     if($count >= 2) {
         $sum = 1; 
     }
}

如果有一个失败,这会增加 $count,当有 2 个失败时,它会设置 $sum,然后您可以像已经完成的那样检查它。

于 2013-07-25T14:26:56.720 回答
0

您可以遍历所有标记并将每个标记 < 30 的 $sum 增加 1。然后检查 $sum 是否 <2 或 > 2,应该就是这样。

于 2013-07-25T14:26:21.437 回答
0

你为什么不对数组进行排序,跳过迭代,看看前两个值是否低于 30,或者第一个值低于 30,第二个值高于 30,最后一个值是否已经高于 30?

像这样:

$all = array(41, 55, 56, 39, 29, 47);

sort($all); 

if ($all[0] < 30 && $all[1] < 30) echo "Failed";
elseif ($all[0] < 30 && $all[1] >= 30) echo "Simple";
elseif ( $all[0] >=30 ) echo "Passed";
于 2013-07-25T14:30:07.933 回答