我使用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.
?>
答案 0 :(得分: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';
}
答案 1 :(得分:1)
只需创建一个计数器即可知道failatures的数量,然后使用不同打印的条件。
<?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";
}
?>
尝试编写好的代码。尽可能清晰易读。
同时将变量命名为含义。
答案 2 :(得分: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,然后你就可以检查它了。
答案 3 :(得分:0)
您可以迭代所有标记,并为每个标记增加$ sum和&lt; 30.然后检查$ sum是否&lt; 2 OR&gt; 2,应该是它。
答案 4 :(得分: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";