PhpWord导入试题

规定word导入格式

1、[单选题][2024][一般]题目1

A.选项1

B.选项2

C.选项3

D.选项4

答案:D

试题图片(上传多媒体图片):

分数:2

答案解析:

2、[多选题][2024][困难]题目2

A.选项1

B.选项2

C.选项3

D.选项4

E.选项5

答案:AE

分数:2

答案解析:

3、[填空题][2024][一般]题目3

答案:答案1、答案2

分数:3

答案解析:

4、[简答题][2017][一般]题目4

答案:答案内容

分数:5

设置关键词:关键词1、关键词2

答案解析:

 PHP获取word内容并导入数据库的代码:

<?php

public function import_word() {

        $word = "question.docx";
        $phpWord = \PhpOffice\PhpWord\IOFactory::load($word, 'Word2007', 'utf-8');
        
        $sections = $phpWord->getSections();
        $wordData = [];

        //将内容分句子
        foreach ($sections as $section) {
            $elements = $section->getElements();
            foreach ($elements as $element) {
                if ($element instanceof \PhpOffice\PhpWord\Element\TextRun) {
                    
                    $wordData[] = $element->getText();
                    
                    foreach($element->getElements() as $text){

                        //导入每道题的图片
                        if ($text instanceof \PhpOffice\PhpWord\Element\Image) {
                            $file_path = './uploads/images'.uniqid().'.jpg';
        
                            file_put_contents($file_path, trim($text->getImageString()));
                            
                            $wordData[] = 'image:'.Config::get('web_site_domain').ltrim($file_path, '.');
                        } 
                    }
                    
                }
            }
        }
        
        //拆分句子
        $questionData = [];
        $sectionData = [];
        foreach($wordData as $val){
        
            if($val){
        
                if(strpos($val, "[单选题]") !== false){
                
                    if ($sectionData) {
                        $questionData[] = $sectionData;
                        $sectionData = [];
                    }
                }else if(strpos($val, "[多选题]") !== false){
                    
                    if ($sectionData) {
                        $questionData[] = $sectionData;
                        $sectionData = [];
                    }
                }else if(strpos($val, "[填空题]") !== false){
                    
                    if ($sectionData) {
                        $questionData[] = $sectionData;
                        $sectionData = [];
                    }
                }else if(strpos($val, "[简答题]") !== false){
                    
                    if ($sectionData) {
                        $questionData[] = $sectionData;
                        $sectionData = [];
                    }
                }
        
                $sectionData[] = $val;
            }
        }
        
        if($sectionData){
            
            $questionData[] = $sectionData;
        }
        
        //对试题数组过滤数据
        $questions = [];
        if ($questionData) {

            foreach ($questionData as $key1=>$val1) {

                $title = "";
                $answer = "";
                $options = "";
                $score = 0;
                $question_type = 0;
                $year = 0;
                $difficulty = 0;
                $question_keywords = "";
                $answer_key = "";
            
                $title = trim($val1[0]);
                $index1 = strpos($title, '[');
                $title = substr($title, $index1);
                if (strpos($title, "[单选题]") === 0) {

                    $question_type = 1;
                    $title = str_replace("[单选题]", "", $title);

                } else if (strpos($title, "[多选题]") === 0) {

                    $question_type = 2;
                    $title = str_replace("[多选题]", "", $title);
                } else if (strpos($title, "[填空题]") === 0) {

                    $question_type = 3;
                    $title = str_replace("[填空题]", "", $title);
                } else if (strpos($title, "[简答题]") === 0) {

                    $question_type = 4;
                    $title = str_replace("[简答题]", "", $title);
                }

                preg_match_all("/\[\d+\]/", $title, $matchs);
                if (isset($matchs[0][0]) && $matchs[0][0]) {
                    $year = str_replace(["[", "]"], "", $matchs[0][0]);
                    $title = str_replace("[{$year}]", "", $title);
                } else {

                    $title = str_replace("[]", "", $title);
                }


                if (strpos($title, "[容易]") === 0) {

                    $difficulty = 1;
                    $title = str_replace("[容易]", "", $title);

                } else if (strpos($title, "[一般]") === 0) {

                    $difficulty = 2;
                    $title = str_replace("[一般]", "", $title);
                } else if (strpos($title, "[困难]") === 0) {

                    $difficulty = 3;
                    $title = str_replace("[困难]", "", $title);
                } else {

                    $title = str_replace("[]", "", $title);
                }

                unset($val1[0]);

                $optionData = [];
                $images = [];
                foreach ($val1 as $k1 => $v1) {

                    for ($i = 0; $i < 26; $i++) {

                        $option_id = chr($i + 65).".";

                        if (strpos($v1, $option_id) === 0) {

                            $optionData[] = str_replace($option_id, "", $v1);
                        }
                    }
                    
                    if(strpos($v1, "image:") === 0) {
                        
                        $images[] = str_replace("image:", "", $v1);
                    }

                    if (strpos($v1, "答案:") === 0) {

                        $answer = str_replace("答案:", "", $v1);
                    }
                    
                    if (strpos($v1, "分数:") === 0) {

                        $score = str_replace("分数:", "", $v1);
                    }

                    if (strpos($v1, "答案解析:") === 0) {

                        $answer_key = str_replace("答案解析:", "", $v1);
                    }

                    if (strpos($v1, "设置关键词:") === 0) {

                        $question_keywords = str_replace("设置关键词:", "", $v1);
                    }
                }
                
                $question_num = $key1 + 1;
                
                //判断每道题是否符合规则
                if(!$title){
                    
                    $this->error("第".$question_num."道题【标题有误】");
                }
                
                if(!$question_type){
                    
                    $this->error("第".$question_num."道题【题型有误】");
                }
                
                if(!$answer){
                    
                    $this->error("第".$question_num."道题【答案有误】");
                }
                
                if(!$difficulty){
                    
                    $this->error("第".$question_num."道题【难度有误】");
                }

                if (in_array(trim($question_type), [1, 2])) {
                    
                    if(!$optionData){
                    
                        $this->error("第".$question_num."道题【选项有误】");
                    }

                    $options = [];
                    foreach ($optionData as $k2 => $v2) {
                        $options[$k2]['options_title'] = $v2;
                        $options[$k2]['options_value'] = 0;
                    }

                    $options = FreelistoftestquestionsModel::validateAnswer($options, trim($answer));

                    if(!$options){
                    
                        $this->error("第".$question_num."道题【选项有误】");
                    }

                }

                $questions[] = [

                    'title' => trim($title),
                    'options' => $options,
                    'answer' => trim($answer),
                    'images' => implode(',', $images),
                    'question_type' => $question_type,
                    'year' => trim($year),
                    'score' => intval($score),
                    'question_keywords' => trim($question_keywords),
                    'difficulty' => $difficulty,
                    'answer_key' => trim($answer_key),
                    'status' => 1,
                    'create_time' => time(),
                ];
            }
        }

        if ($questions) {

            if (!QuestionsModel::insertAll($questions)) {

                return false;
            }

            return true;
        } else {

            return false;
        }
    }

相关推荐

  1. PhpWord导入试题

    2024-03-31 05:02:06       15 阅读
  2. phpword使用TemplateProcessor对模板进行替换

    2024-03-31 05:02:06       9 阅读
  3. 2024年最新 CKA 试题题库及答案详解 导航

    2024-03-31 05:02:06       16 阅读
  4. MongoDB导入导出命令

    2024-03-31 05:02:06       31 阅读
  5. Oracle导出导入dmp

    2024-03-31 05:02:06       28 阅读
  6. Oracle导入导出dump

    2024-03-31 05:02:06       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-31 05:02:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-31 05:02:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-31 05:02:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-31 05:02:06       18 阅读

热门阅读

  1. 解决Nginx常见问题的技术指南

    2024-03-31 05:02:06       16 阅读
  2. leetcode自练题目

    2024-03-31 05:02:06       19 阅读
  3. 探究Mark Text: 新兴的全平台Markdown编辑器

    2024-03-31 05:02:06       17 阅读
  4. 【React】vite + react 项目,安装、配置、使用 less

    2024-03-31 05:02:06       16 阅读
  5. Vue3+Vite+Axios Request 请求封装(TS版本)最新

    2024-03-31 05:02:06       21 阅读
  6. 设计模式(8):组合模式

    2024-03-31 05:02:06       18 阅读