用PHP中较短的代码验证多个输入

用PHP中较短的代码验证多个输入,php,validation,optimization,Php,Validation,Optimization,下面的代码显示了验证2个输入字段的过程。最后,我用Json返回每个输入的布尔结果 想象一下,我将再做下面20次,代码非常大。i如何用更短的代码执行相同的过程 $res =false; $res2 = false; if(isset($_POST['Ans1'])) //if user checked ans1 radio { if($_POST['Ans1'] == "x divides y") #correct answer {

下面的代码显示了验证2个输入字段的过程。最后,我用Json返回每个输入的布尔结果

想象一下,我将再做下面20次,代码非常大。i如何用更短的代码执行相同的过程

$res =false;
$res2 = false;
    if(isset($_POST['Ans1'])) //if user checked ans1 radio
        {
          if($_POST['Ans1'] == "x divides y") #correct answer
          {
                $res = true;
          }
          else{#wrong answer
              $res = false;
          }
        }
        else{ #not checked
            $res = false;  
        }


        if(isset($_POST['Ans2'])) //if user checked ans2 radio
        {
          if($_POST['Ans2'] == "x greater than y") #correct answer
          {
                $res2 = true;
          }
          else{#wrong answer
              $res2 = false;
          }
        }
        else{ #not checked
            $res2 = false;
        }

        echo json_encode(['an1'=>$res,'an2'=>$res2]); 

删除所有已定义为false的其他内容

$res =false;
$res2 = false;
if(isset($_POST['Ans1']) && $_POST['Ans1'] == "x divides y") //isset and value check 
{
    $res = true;
}

if(isset($_POST['Ans2']) && $_POST['Ans2'] == "x greater than y") //isset and value check
{
 $res2 = true;
}
echo json_encode(['an1'=>$res,'an2'=>$res2]);

删除所有已定义为false的其他内容

$res =false;
$res2 = false;
if(isset($_POST['Ans1']) && $_POST['Ans1'] == "x divides y") //isset and value check 
{
    $res = true;
}

if(isset($_POST['Ans2']) && $_POST['Ans2'] == "x greater than y") //isset and value check
{
 $res2 = true;
}
echo json_encode(['an1'=>$res,'an2'=>$res2]);

您可以循环$\u POST并使用一个包含正确答案的数组进行比较

返回值是一个数组,每个答案上都有true/false

$correct = ["x divides y", "x greater than y"]; // and so on...
$i=0;
foreach($_POST as $key => $Ans){
    if(isset($Ans)){ //if user checked radio
        if($Ans == $correct[$i]){ #correct answer
            $res[$key] = true;
        }else{ #wrong answer
            $res[$key] = false;
        }
    }else{ #not checked
        $res[$key] = false;  
    }
    $i++;
}
echo json_encode($res); // example: Ans1 : true, Ans2 : false
如果您的
$\u POST
有其他值,您可以使用preg\u grep仅过滤答案

$POST = preg_grep("/Ans\d+/", $_POST);

然后循环$POST。

您可以循环$\u POST,并使用带有正确答案的数组进行比较

返回值是一个数组,每个答案上都有true/false

$correct = ["x divides y", "x greater than y"]; // and so on...
$i=0;
foreach($_POST as $key => $Ans){
    if(isset($Ans)){ //if user checked radio
        if($Ans == $correct[$i]){ #correct answer
            $res[$key] = true;
        }else{ #wrong answer
            $res[$key] = false;
        }
    }else{ #not checked
        $res[$key] = false;  
    }
    $i++;
}
echo json_encode($res); // example: Ans1 : true, Ans2 : false
如果您的
$\u POST
有其他值,您可以使用preg\u grep仅过滤答案

$POST = preg_grep("/Ans\d+/", $_POST);

然后改为循环$POST。

您可以使用以下函数检查答案:

function checkAnswer($key, $val) {
    $mapping = [
        'Ans1' => 'x divides y',
        'Ans2' => 'x greater than y'
    ];

    return $mapping[$key] == $val;
}
您将需要答案的映射。然后可以循环POST数组以检查答案;如果这篇文章只有答案

$result = [];
foreach($_POST as $key => $val) {
    $res = checkAnswer($key, $val);
    $result[$key] = $res;
}
echo json_encode($result);

您可以使用以下函数检查答案:

function checkAnswer($key, $val) {
    $mapping = [
        'Ans1' => 'x divides y',
        'Ans2' => 'x greater than y'
    ];

    return $mapping[$key] == $val;
}
您将需要答案的映射。然后可以循环POST数组以检查答案;如果这篇文章只有答案

$result = [];
foreach($_POST as $key => $val) {
    $res = checkAnswer($key, $val);
    $result[$key] = $res;
}
echo json_encode($result);

有趣的是,你能做一些验证来展示你的代码是如何工作的吗?没有经过测试,但应该能给你基本的想法。(更新答案)放一个
$result=[]
之后,您的代码工作正常。谢谢是的,你一直在Javascript和PHP之间切换,事情就是这样发生的很乐意帮忙!有趣的是,你能做一些验证来展示你的代码是如何工作的吗?没有经过测试,但应该能给你基本的想法。(更新答案)放一个
$result=[]
之后,您的代码工作正常。谢谢是的,你一直在Javascript和PHP之间切换,事情就是这样发生的很乐意帮忙!如果使用类似的方法,则需要在开始时将20$res变量定义为false。如果使用类似的方法,则需要在开始时将20$res变量定义为false。如何返回每个布尔值的结果?我使用了
echo json_编码(['an1'=>$res[0],'an2'=>$res[1]])
它必须是
an1
而不是作为您的post值
Ans1
?这无关紧要,这是一个示例如何返回每个布尔值的结果?我使用了
echo json_编码(['an1'=>$res[0],'an2'=>$res[1]])
它必须是
an1
而不是作为您的post值
Ans1
?这无关紧要,只是一个例子