我有一个用于确定数学和物理值的代码。
->数学成绩:
如果值0-<50,然后是"坏"
如果值50-<75,然后"足够"
如果值75-<85,然后"良好"
如果值85-<100,"伟大"
->物理分数:
如果值0-<50,然后是"坏"
如果值50-<75,然后"良好"
如果值75-<85,然后是"伟大的"
如果值85-<100,"非凡"
如果我输入物理分数=50,我得到的结果是这样的:
"Your physics scores are bad"
源代码:
<?php
$value=50;
//choice:
$courses='physics'; //or
$courses='math';
if($courses='math' and $value<50){
$sentence_value='Your math scores are bad';}
elseif ($courses='physics') {
$sentence_value='Your physics scores are bad';}
elseif
($courses='math' and $value<75){
$sentence_value='Your math scores are enough';}
elseif ($courses='pyhsics') {
$sentence_value='Your physics scores are good';}
elseif
($courses='math' and $value<85){
$sentence_value='Your math scores are good';}
elseif ($courses='physics') {
$sentence_value='Your physics scores are great';}
elseif
($courses='math' and $value<=100){
$sentence_value='Your math scores are great';}
elseif ($courses='physics') {
$sentence_value='Your physics scores are extraordinary';}
echo"Value : $sentence_value";
?>
<br />
结果,如果我输入50分的数学成绩,我想要这样::
"Your math scores are bad"
如果我输入70分的数学成绩,我想要这样:
"Your math scores are enough"
如果我输入80分的数学成绩,我想要这样:
"Your math scores are good"
如果我输入100分的数学成绩,我想要这样:
"Your math scores are great"
如果我输入50分的物理成绩,我想要这样:
"Your math scores are bad"
如果我输入74分的物理成绩,我想要这样:
"Your math scores are good"
如果我输入83分的物理成绩,我想要这样:
"Your math scores are great"
如果我输入物理分数98分,我想要这样:
"Your math scores are extraordinary"
我会用一个更容易理解的开关案例来做这件事。顺便说一句,这应该在代码审查中进行,而不是在Stack上。
<?php
$value=70;
//$courses='physics'; //or
$courses='math';
switch (true) {
case $value <= 50:
echo "Your ".$courses." scores are bad";
break;
case $value <= 75:
echo "Your ".$courses." scores are enough";
break;
case $value <= 85:
echo "Your ".$courses." scores are good";
break;
case $value <= 95:
echo "Your ".$courses." scores are great";
break;
case $value <= 100:
echo "Your ".$courses." scores are excellent";
break;
default:
echo "Bug";
break;
}
?>
您使用'='来比较值,这是错误的!'='正在使用为变量赋值,并使用"=="比较值!你正在为同一个变量赋值和重新赋值,当你为课程分配"数学"时,你失去了以前的值"物理",也许你应该从用户那里输入哪门课程,然后他们给变量赋值!看看完整的样本:
<?php
if(isset($_POST[grade]) && isset($_POST[course])){
$value=$_POST[grade];
//choice:
$courses=$_POST[course]; //or
if($courses=='math'){
if($value<50){
$sentence_value="Your $courses scores are bad";
}
elseif($value<75){
$sentence_value="Your $courses scores are enough";
}
elseif($value<85){
$sentence_value="Your $courses scores are good";
}
elseif($value<=100){
$sentence_value="Your $courses scores are great";
}
}
elseif($courses=='physics'){
if($value<50){
$sentence_value="Your $courses scores are bad";
}
elseif($value<75){
$sentence_value="Your $courses scores are good";
}
elseif($value<85){
$sentence_value="Your $courses scores are great";
}
elseif($value<=100){
$sentence_value="Your $courses scores are extraordinary";
}
}
echo"Value : $sentence_value";
}
?>
<!DOCTYPE html>
<html lang="en">
<body>
<form id="form1" name="form1" action="" method="post">
<input type="text" name="course" placeholder="course" />
<input type="text" name="grade" placeholder="grade"/>
<input type="submit" value="submit" />
</form>
</body>
</html>
代码中存在许多问题。
<?php
$value=50;
//choice:
$courses='physics'; //or
$courses='math';
在该块的末尾,$courses
将始终具有math
的值。
if($courses='math' and $value<50){
在这个if语句中,将值math
赋值给$courses
,该值的计算结果为true。但是,$value<50
的计算结果为false(50!<50
),因此您将传递给下一个elseif。
elseif ($courses='physics') {
在这里,将值physics
分配给$courses
,返回true,因此执行下一行并退出if块。
下面是一个if块,它应该工作得更好:
if ($courses == 'math') {
if ($value < 50) {
//
} elseif ($value < 75) {
//
} elseif ($value < 85) {
//
} else {
//
}
} elseif ($courses == 'physics') {
if ($value < 50) {
//
} elseif ($value < 75) {
//
} elseif ($value < 85) {
//
} else {
//
}
}
function get_grades($subject, $score) {
$math = [
50 => "bad",
75 => "enough",
85 => "good",
100 => "great"
];
$physics = [
50 => "bad",
75 => "good",
85 => "great",
100 => "extraordinary"
];
if ($subject == 'math') {
$grades = $math;
$sentence = "Your math scores are "
} else {
$grades = $physics;
$sentence = "Your physics scores are "
}
foreach ($grades as $k => $v){
if ($score <= $k){
$result = $v;
}
}
return $sentence . $result;
}
echo get_grades("math",50);