如何使用PHP創建標準化的試題庫?

2020-11-15 kid編程

周末接到一個創建考試題庫的任務,要求按照規定格式整理400道單項選擇題。題目比較好找,之前也有部分練習題,但是格式要求與考試題庫格式要求有差別,要求整理格式如下圖:

題庫格式要求

考試題庫題目格式要求如上圖所示,包含了題目類型、難度係數、分數、選項及參考答案。而手裡的練習題目格式如下:

已有練習題格式

已有練習題格式如上圖所示,如果直接在word中調整,由於題目數量較多,操作較為繁瑣,效率低下,因此考慮編寫程序實現對文檔進行標準格式化處理。


基本思路

本學期正好給學生講授PHP課程,因此考慮使用PHP所提供的文件讀寫方法,及字符串處理相關函數對字符串進行處理。將每一道題目讀取並按照題幹、選項、答案三部分進行識別。最終按照所需提交的考試題庫進行輸出文檔的編輯。實現基本思路過程描述如下:

  1. 將已有練習題從word轉化為txt文本,去掉所包含的各類樣式;
  2. 使用php所提供的fopen方法及fread方法等將txt內容讀取到內存並用變量表示;
  3. 將字符串進行預處理,主要去掉回車換行,將全形輸入的內容轉化為半角輸入內容,將部分符號替換為特殊符號(用於實現字符查找,如將題號後的、轉為#,1#表示題號1;A、可表示為A#);
  4. 使用模式匹配找到所有題號對應的位置,兩個位置之間部分即為一道題目;
  5. 對獲取的每道題目進行內容識別,找到其中的題幹、選項與答案,由於是選擇題只需要找到A#位置即可截取到之前的題幹部分及參考答案,用A#、B#、C#、D#的位置數據可分別截取題目選項;
  6. 按照考試題庫要求添加前綴等信息,使其標準化。

編程實現

在明確基本實現思路之後即可通過編寫程序實現對非標準化題目進行標準化處理。其中讀取txt數據到變量中實現代碼如下:

讀取文檔

文檔讀取完成之後即可對其進行格式化預處理,將文檔中的全形字符轉為半角字符,將空格回車及換行等進行刪除。實現代碼如下:

格式化預處理

格式化預處理完成之後即可使用模式匹配從字符串找到每一個標題部分的位置,並通過相鄰兩個找到每一條試題,實現代碼如下:

讀取完整題目

讀取到完整題目之後就可以使用字符串函數從其中找到題幹、選項、答案,實現代碼如下:

獲取題幹與參考答案

識別讀取選項

在識別讀取選項過程中發現已有題目部分只有三個選項,因此針對這種情況,人為添加第四個選項為以上答案都不對,不影響題目作答。最後使用輸出語句按照考試題庫要求進行題目的輸出,根據讀取的txt不同設置難度值。輸出語句如下圖所示:

輸出標準考試題庫


實現效果

通過使用php編程最終實現將不符合要求的試題自動轉換為符合要求題庫,避免了word操作的繁瑣,提高了題庫創建的效率。頁面運行效果如下:

轉換結果

轉換完成之後可直接將其複製到word文檔,也可以直接寫入word文檔。由於時間限制,沒有考慮直接寫入word文檔。有興趣讀者可自己編碼實現。本案例提供完整代碼,如需要請關注並私信。


本頭條號長期關注編程資訊分享;編程課程、素材、代碼分享及編程培訓。如果您對以上方面有興趣或代碼錯誤、建議與意見,可在評論區回復。更多程序設計相關教程及實例分享,期待大家關注與閱讀!

相關焦點

  • 使用GD庫生成圖片驗證碼
    一、GD 庫介紹和加載GD 庫是一個開放的、動態創建圖像的、原始碼公開的函數庫,可以從官網下載。GD 庫的安裝可參照 二、開發步驟1、使用 imagecreatetruecolor()函數創建一個圖片(即畫布)。2、填充圖片背景,使用 imagettftext()函數向圖片添加隨機驗證碼。
  • PHP 之 composer 安裝及使用
    我們這篇主要講下comoser的安裝以及下載,及其以monolog為例,演示如何實際使用的方法。網上也有很多類似的片段例子,大都是片段,完整的幾乎沒有。所以,我把它整理了,分享給大家。以便大家能夠快速上手。首先我們還是需要明白composer究竟是什麼?Composer 是 PHP5.3以上 的一個依賴管理工具。
  • PHP開發人員是如何高效使用17個 Composer 實踐
    聽起來有些危言聳聽,但是注意這個要點就會避免你的合作夥伴向項目中在添加新庫時不小心更新了所有依賴(代碼審查時可能忽略這一點)。Tip #4: 對庫依賴項使用版本範圍創建庫時,應儘可能定義最大的可用版本範圍。
  • 盤點php的gui圖形界面開發擴展庫
    我們都知道php的底層是c語言實現的,並且它的擴展也是使用c語言來開發的,而且它的大部分功能都是通過擴展來實現的,因此,它也是可以通過擴展庫來實現圖形界面開發的,今天,我們就來盤點php開發圖形界面的擴展庫。
  • php如何創建數據表?
    在上一篇的內容當中,我們學習了在php中怎樣創建一個簡單的資料庫,今天我們來介紹一下再php中怎樣創建數據表?資料庫是由很多張的數據表構成的,資料庫就相當於一個房間,數據表就相當於房間裡面的箱子,好我們開始來學習怎樣創建數據表。
  • php怎樣創建資料庫?
    資料庫是編程的核心內容,在使用php做網站的過程中,固然要與資料庫打交道,那麼在php中,怎樣來創建一個資料庫呢?下面我們就一起來了解一下吧。1、創建一個函數我在這裡是作為演示實例,所以沒有用框架,用的是原生的,打開編輯器,新建一個文件,然後再文件裡面,先新建一個函數,這裡命名是create_data,接下來我們將在這個函數裡面來寫php怎樣創建一個資料庫?
  • PHP程序設計試題與答案
    從HTML中分離PHP不可 以下是可以使用的方法.( )。A.<? . . . ?> B.<?php . . .php ?> C。<script language="php"> . . . </script> D。
  • 如何使用python中matplotlib庫分析圖像顏色
    你如何使代碼「理解」圖像的上下文?   通常,使用AI分析圖像的第一步 是找到主要顏色。在如何使用python中matplotlib庫分析圖像顏色中,我們將使用matplotlib的 image類在圖像中找到主色 。
  • 網際網路知識充電:php中如何使用SQL語言對資料庫進行操作
    既然php和MySQL的關係如此密切,那麼理論上使用通過php就能夠很好的控制MySQL資料庫,真實情況如何呢?答案是肯定的,通過php能夠很方便的嵌入SQL語句,對相應的資料庫進行操作。那麼如何進行操作呢?
  • 雲伺服器上如何搭建php環境
    雲伺服器上如何搭建php環境?PHP是一種在伺服器端執行的開源腳本語言,與C語言類似,是常用的網站程式語言。 PHP 有很多版本,這裡我們以PHP 5.4為例。介紹下如何在 Linux 系統雲伺服器中安裝 PHP 源碼包。
  • 讓PHP能夠調用C的函數-FFI擴展
    比如說讓 Java 來做微服務層,用 C++ 來進行底層運算,用 PHP 來做中間層,最後使用 JS 展現效果。這些語言間的配合大部分都是通過 RPC 來完成,或者直接將數據入庫再使用不同的語言來取用。那麼,我們 PHP 的代碼能否直接調用這些語言呢?其實,PHP 還真為我們準備了一個可以直接調用 C 語言的擴展庫,並且這個擴展庫還是已經默認內置在 PHP 中了,它就是 FFI 擴展。
  • URL標準化是什麼意思?如何標準化URL
    URL標準化,英文:url canonicalization中文翻譯:SEO的建議:URL標準化 「URL標準化」是一個動名詞,不好直接解釋,我把它反過來一下:什麼是一個標準化的URL?很多情況下,我們認為以下這幾個連結都指向同一個頁面(首頁):www.seoyouhua.vipseoyouhua.vip/www.seoyouhua.vip/index.htmlseoyouhua.vip/index.php但是從URL發送請求並返回網頁內容的過程來看,這些URL都是互不相同的。
  • 事件驅動的微服務-創建第三方庫
    本篇是我的事件驅動的微服務系列的第三篇,主要講述如何在Go語言中創建第三方庫。如果想要了解總體設計,請看第一篇"事件驅動的微服務-總體設計"。在Go語言中創建第三方庫是為了共享程序,做起來並不困難,不過你需要考慮如下幾個方面:第三方庫的對外接口第三方庫的內部結構如何處理配置參數如何擴充第三方庫我們用日誌做例子講述如何創建第三方庫。
  • php工作原理是什麼?php常用功能有哪些?
    PHP、Apache和MySQL的組合已經成為Web伺服器的標配,php可以做很多事情,PHP是服務端的腳本程序,需要安裝php應用程式去解釋執行,簡單來說php是web伺服器(iis、apache)功能擴展,這種結構更加適合網站原理,php需要和web伺服器、資料庫一塊才能發揮功能。
  • php面試題之PHP核心技術
    php /** * 創建多級目錄 * @param $path string 要創建的目錄 * @param $mode int 創建目錄的模式,在windows下可忽略 */ function create_dir($path,$mode = 0777) { if (is_dir($path)) { 34;該目錄已經存在
  • 如何創建一個FB塊,並進行加密封裝成庫文件?
    FB塊可以將特定的而且需要經常使用的功能打包成一個塊,在程序中可以重複調用。FB塊也可以打包成一個庫文件存放在電腦中,或者拷貝到別的電腦中使用。我們還可以對庫進行加密,保證庫程序的安全性。1、 主程序中的數據是如何進入到FB塊中進行運算,FB塊的結果又是如何送到主程序中呢?
  • PHP圖片處理庫Grafika詳細教程(1):圖像基本處理
    grafika給我們提供了一個非常好用的autoloader.php位於src目錄下。 在index.php中引入它,(說明下,以下示例都需要引入這個autoloader.php文件,我們默認省略),下面就可以直接開發了。
  • WordPress使用timthumb.php截取文章縮略圖教程
    相信很多人對WordPress的縮略圖不太滿意,因為WordPress系統會默認裁剪三種縮略圖,然後博客上傳的圖片就會生成不同大小的三份,而其中兩份又沒有使用,這樣下來嚴重佔用並浪費了我們的網站空間,今天暖島交大家一種方法,完美結局文章縮略圖的困擾:使用timthumb.php進行裁剪縮略圖
  • php基礎大通關——十分鐘了解php基礎知識點之二
    本節我們繼續通過練習題的方式來熟悉php的基礎知識點。1. echo 和 print 有什麼區別?php常用函數3. Joomla 在 PHP 中是什麼? 一套功能豐富的庫 開源 CMS 設計動態頁面的框架 可重用 PHP 組件的框架和分發系統解析:Joomla!
  • memcached的PHP擴展安裝使用
    1、PHP擴展安裝為了LNMP架構中,可以使用memcached緩存,業務代碼為php,需要安裝php的擴展,來實現php操作memcached extension選擇對應擴展包①上傳PHP擴展庫memcached-3.1.3.tgz php