채택완료

PHP 조건인데여..

2019-12-04 (수) 15:04:46 4,075

객관식 퀴즈문제 5문제가 있습니다.

배열로 나오게 됩니다.

     정답           내선택

   $arr['0']           $q1

   $arr['1']           $q2

   $arr['2']           $q3

   $arr['3']           $q4

   $arr['4']           $q5

------------------------------------------

예) 

     정답       내선택      결과

       2            3            X

       4            2            X

       2            4            X

       3            3            O

       1            1            O

-------------------------------------------

결과를 이용하여  점수를 구하고자 합니다. ( 위의 경우  40점  ) 2/5*100

초보임...

if( $arr[$I] ==  $q$I)

{

}

좀 도와주십쇼  아ㅇ

------------------------------------------------------------------

답변 5개 / 댓글 9개

채택된 답변
+20 포인트
Copy
$score = 0;
$arr   = [2, 4, 2, 3, 1];

$q1 = 3;
$q2 = 2;
$q3 = 4;
$q4 = 3;
$q5 = 1;

foreach ($arr as $k => $v) {

    $answer = ${'q' . ($k + 1)};

    if ($v == $answer) {
        $score++;
    }
}

echo ($score / count($arr)) * 100;

답변에 대한 댓글 3개

좋은데요 ..40 나옵니다 위 예에서는 / 그런데 정답/선택 값이 고정적이지 않아서요
1번에서 5번까지라면 모르지만 문제수가 100개 정도 되면..어찌할지
상관없을 것 같은데요.
아래처럼 점수를 구하니까요.

(맞은개수/문제개수) * 100
참고하여 아래와 같이 하여 일단 원하는 답을 얻었습니다.
<?php

$sum=0;
for($i=0; $i < 5; $i++){ //숫자"5" 대신 변수를 사용할 것입니다.
if($arr[$i]==${'q'.($i+1)}) //이표현이 무척 어려웟습니다. ${'q'.($i+1)};
{
$sum=$sum+1;

//echo ${'q'.($i+1)};
}
}
$avg = $sum/5*100; //숫자"5" 대신 변수를 사용할 것입니다.
//echo "합계: " . $sum . "<br />";
echo "점수: " . $avg;
?>

--------------------------
댓글 모두 큰 도움이 되었습니다.
도움주신 모든 분께 감사드립니다.

<form name='test' action='answer_check.php' method='post'>

문1. ~~~체크하시오

<input name='ans1' value='1'>일이요 <input name='ans1' value='2'>이요

<input name='ans1' value='3'>삼이요

문2. ~~~체크하시오

<input name='ans2' value='1'>일이요 <input name='ans2' value='2'>이요

<input name='ans2' value='3'>삼이요

~~~

문100. ~~~체크하시오

<input name='ans100' value='1'>일이요 <input name='ans100' value='2'>이요

<input name='ans100' value='3'>삼이요

<input type='submit' value='정답제출'>

</form>

answer_check.php

<?php

$k = 100; //문항수

$ansArr=array(2,4,2,3,1,~~~~~~); //----정답배열

for($i=1; $i<= $k; $i++){

 $ans = 'ans'.$i;

 if($_POST[$ans] && $ansArr[$i] == $_POST[$ans]) $nn++;

}

정답수 : <?=$nn?>

답변에 대한 댓글 2개

균이 님 해보니 아래 라인에서
if($_POST[$ans] && $ansArr[$i] == $_POST[$ans]) {

이런 에러가 발생하는데, 왜 그런걸까요? 아무리 봐도 이상이 없어 보이는데..
Notice: Undefined offset: 3 in ... answer_check.php on line 8
코드에 빠진 것이 있군요

다음처럼 모두 type='radio' 를 넣으세요
<input name='ans1' value='1'> -----> <input name='ans1' value='1' type='radio'>

if($_POST[$ans] && $ansArr[$i] == $_POST[$ans]) $nn++; ----->
if( isset($_POST[$ans]) && $ansArr[$i] == $_POST[$ans]) $nn++;

그리고 위 소스 그대로 테스트할 때는
$k = 100; //문항수 <----- 실제 문항수로 변경
$ansArr=array(2,4,2,3,1,~~~~~~); //----정답배열 <--- 이 부분을 실제 문항에 맞게 배열을 수정해야 합니다

$arr= "2,4,2,3,1";
$q_ha="3,2,4,3,1";
$arr_a = explode(",", $arr);
$q_ha_a = explode(",", $q_ha);
$g_h=0;
for($i=0;$i<count($q_ha_a);$i++){
    if($arr_a[$i]==$q_ha_a[$i])
     $g_h=$g_h*1+20;
}

echo $g_h;

답변에 대한 댓글 1개

정답/선택 값이 고정적이지 않아서요 ;;
한번 해보겠습니다.^
감사합니다.

$hap = "0";

for( $i=0; $i < count($arr); $i++){

if( $arr[$I] ==  $q$I)

{

$hap++;

}

}

if($hap > 0){

  $total_hap = $hap * 20;

}

echo $total_hap;

으로..해보심이..ㅎㅎ

답변에 대한 댓글 2개

에러가 어디서 나는 걸까요...생각중입니다만..
if( $arr[$I] == $q$I) // 이부분은 $q$I+1 //이거 한 번 봐 주세요..
감사합니다;;
$q_c = $q.$I;

작업이안되는 건 아닌데..  $q1  이것도 배열로 받는 방안을 생각해보세요.

훨씬 효율적일 겁니다.

답변에 대한 댓글 1개

네...저로서는 오랜생각을...ㅎ

답변을 작성하려면 로그인이 필요합니다.