25 พฤศจิกายน 2554

สร้างคำตอบแบบสุ่ม ด้วย XML และ PHP

บทความนี้จะเป็นตัวอย่างในการทำคำตอบ ของข้อสอบแต่ละข้อของเรา ให้สุ่มเปลี่ยนลำดับไปมา ซึ่งตัวคำถามเอง ถ้าหากเราดึงจากฐานข้อมูล Mysql เราก็จะใช้คำสั่ง ORDER BY RAND() เพื่อให้ข้อสอบสุ่มขึ้นมาได้เลยซึ่งตรงนี้ผมก็จะข้ามไปเป็นการสุ่มคำตอบแทน



ซึ่งในบทความนี้เราก็จะสร้างคำถามตัวอย่างจากไฟล์ XML ขึ้นมาสักหนึ่งไฟล์ตามตัวอย่างด้านล่างเลยครับโดยผมให้ชื่อว่า question.xml

<?xml version="1.0" encoding="UTF-8"?>
<questionstore>
<question number="1">
<questiontext>สุนัขมีกี่ขา</questiontext>
<answer1>1 ขา</answer1>
<answer2>2 ขา</answer2>
<answer3>4 ขา</answer3>
<answer4>5 ขา</answer4>
</question>
<question number="2">
<questiontext>เมืองไทยมีกี่จังหวัด</questiontext>
<answer1>79 จังหวัด</answer1>
<answer2>78 จังหวัด</answer2>
<answer3>77 จังหวัด</answer3>
<answer4>76 จังหวัด</answer4>
</question>
<question number="3">
<questiontext>วันที่ 5 ธันวา เป็นวันอะไร</questiontext>
<answer1>วันพ่อแห่งชาติ</answer1>
<answer2>วันแม่แห่งชาติ</answer2>
<answer3>วันจันทร์</answer3>
<answer4>ไม่มีข้อถูก</answer4>
</question>
<question number="4">
<questiontext>กรุงเทพมีจำนวนเขตอยู่กี่เขต</questiontext>
<answer1>50 เขต</answer1>
<answer2>51 เขต</answer2>
<answer3>52 เขต</answer3>
<answer4>49 เขต</answer4>
</question>
<question number="5">
<questiontext>ANT แปลว่าอะไร ?</questiontext>
<answer1>มด</answer1>
<answer2>ไก่</answer2>
<answer3>ช้าง</answer3>
<answer4>หมู</answer4>
</question>
</questionstore>

หลังจากได้ตัวอย่างของข้อสอบ จาำกไฟล์ XML ที่ผมสร้างขึ้นมาแล้วทีนี้ก็จะเป็นการดึงข้อมูลมาเพื่อทำการสุ่มคำตอบกัน
ให้ทำการสร้างไฟล์ขึ้นมาหนึ่งไฟล์ สมมติชื่อว่า test_question.php โดยมีโค้ดตามด้านล่างนี้

<?php
$xml = simplexml_load_file('question.xml'); // ใช้ฟังชั่นก์ simplexml_load_file อ่านไฟล์ XML

foreach($xml->question as $question) วนลูปเอา question ที่มีภายใน
{

$questiontext = $question->questiontext; // คำถาม
$answer1=$question->answer1; // คำตอบข้อที่ 1
$answer2=$question->answer2; // คำตอบข้อที่ 2
$answer3=$question->answer3; // คำตอบข้อที่ 3
$answer4=$question->answer4; // คำตอบข้อที่ 4

echo '<u>'.$questiontext.'</u><br>'; // แสดงคำถามทางหน้าจอก่อน

// เข้าสู่กระบวนการสุ่มคำตอบกัน
$answers = array(); // สร้างตัวแปร array เพื่อเก็บคำตอบ

// เก็บคำตอบแต่ละ่ข้อเข้าไปที่ตัวแปร array ซึ่งเราให้เริ่ม index ที่ 1 ไปเลยครับ
$answers[1] = $answer1; // เก็บคำตอบแต่ละ่ข้อเข้าไปที่ตัวแปร array
$answers[2] = $answer2; // เก็บคำตอบแต่ละ่ข้อเข้าไปที่ตัวแปร array
$answers[3] = $answer3; // เก็บคำตอบแต่ละ่ข้อเข้าไปที่ตัวแปร array
$answers[4] = $answer4; // เก็บคำตอบแต่ละ่ข้อเข้าไปที่ตัวแปร array

// ใช้ฟังชั่นก์ str_shuffle เพื่อใช้สลับตัวอักษรที่เราต้องการในที่นี้ผมให้ค่าเป็น 1234 ตามค่า index array ของเราครับ ซึ่งหลังจากผ่านฟังชั่นก์ str_shuffle แล้วตัวเลข 1234 จะสุ่มไปมาครับ

$string = str_shuffle('1234');

for($num_ans= 0; $num_ans < count($answers); $num_ans++):
// $answers[] คือ array คำตอบ
// $string{$num_ans} คือ ตัวเลข หลังจากผ่านฟังชั่นก์ str_shuffle ซึ่งเรานำมาใช้เป็น index array ครับ
echo $answers[$string{$num_ans}].'<br>';
endfor;

echo'<hr>';
}
?>

ครับ บทความนี้ก็น่าจะพอนำไปเป็นตัวอย่างในการสร้างคำถาม คำตอบแบบสุ่ม โดยการใช้งาน XML และ PHP ครับ

แนะนำความรู้นี้โดย พี่ปลาทู แห่ง select2web
อ่านความรู้เพิ่มเติมเกี่ยวกับฟังชั่น str_shuffle ได้ที่ http://code.function.in.th/php/string/string_str_shuffle

ไม่มีความคิดเห็น:

แสดงความคิดเห็น