为了账号安全,请及时绑定邮箱和手机立即绑定

PHP读取包含问答的txt文件并创建数组或对象?

PHP读取包含问答的txt文件并创建数组或对象?

PHP
婷婷同学_ 2023-04-15 17:44:31
我在moodle中看到了这个功能,他们上传 .txt 文件并解析数据并创建问题库。有些问题也有三个选项样本 :-What is php?A. Php is a language.B. Php creates HTML.C. Php is fun.D. none of these.ANSWER: DWhich is YII-2?A. Framework.B. Tool.C. None of theseANSWER: A到目前为止,我已经尝试过解析它,但我不知道要实现批量上传到底要做什么。txt_file    = file_get_contents('path/to/file.txt');$rows        = explode("\n", $txt_file);array_shift($rows);foreach($rows as $row => $data){}我正在尝试获取的数组[['question' => 'Php is a language.','options' => [             'A' =>  'Php is a language.',             'B' => 'Php creates HTML.',             'C' => 'Php is fun.',             'D' => 'none of these.'             ],'answer' => 'D'],.....]示例文件:-文件代码fbSObnlghQkqroEk4lrQ
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

尝试(?mi)^(?!\h*(?:[A-Z]\h*\.|ANSWER\h*:))\h*(?<question>\S.*?)\??\h*\s*^\h*A\h*\.\h*(?<A>.*?)\h*\s*(?:^\h*B\h*\.\h*(?<B>.*?)\h*(?:\s*^\h*C\h*\.\h*(?<C>.*?)\h*(?:\s*^\h*D\h*\.\h*(?<D>.*?)\h*(?:\s*^\h*E\h*\.\h*(?<E>.*?)\h*)?)?)?)?\s*^\h*ANSWER\h*:\h*(?<answer1>[A-F])(?:\h*,\h*(?<answer2>[A-F]))?

循环匹配,从部分创建单个数组,
附加到更大的数组。
不需要“选项”,但匹配后可以从组 AE 创建子数组
,然后添加到单个数组。
重复下一场比赛。

php_demo

<?php

// Your code here!


$regex = '~(?mi)^(?!\h*(?:[A-Z]\h*\.|ANSWER\h*:))\h*(?<question>\S.*?)\??\h*\s*^\h*A\h*\.\h*(?<A>.*?)\h*\s*(?:^\h*B\h*\.\h*(?<B>.*?)\h*(?:\s*^\h*C\h*\.\h*(?<C>.*?)\h*(?:\s*^\h*D\h*\.\h*(?<D>.*?)\h*(?:\s*^\h*E\h*\.\h*(?<E>.*?)\h*)?)?)?)?\s*^\h*ANSWER\h*:\h*(?<answer1>[A-F])(?:\h*,\h*(?<answer2>[A-F]))?~'; 


// Declare a string 

$nameString = 'What is php?


A. Php is a language.


B. Php creates HTML.


C. Php is fun.


D. none of these.


ANSWER: D


Linux is

A. A Graphic Software

B. A Driver

C. A Line Controller Software

D. An Operating System

ANSWER: D

Which feature helps in compress and contain the collection of files in to one

A. Zip

B. Shortcut

C. Icon

D. Extract

ANSWER: A



Which is YII-2?


A. Framework.


B. Tool.


C. None of these


ANSWER: A,B'; 



// Use preg_match_all() function


$QA = []; // All questions


if ( preg_match_all($regex, $nameString, $matches, PREG_SET_ORDER) ) {

    foreach ($matches as $match) {

       $qa = [];   // Single question

       $qa['question'] = $match['question'];

       $qa['A'] = $match['A'];

       if ( array_key_exists( 'B', $match ) && $match['B'] )  $qa['B'] = $match['B'];

       if ( array_key_exists( 'C', $match ) && $match['C'] )  $qa['C'] = $match['C'];

       if ( array_key_exists( 'D', $match ) && $match['D'] )  $qa['D'] = $match['D'];

       if ( array_key_exists( 'E', $match ) && $match['E'] )  $qa['E'] = $match['E'];

       $qa['answer1'] = $match['answer1'];

       if ( array_key_exists( 'answer2', $match ) && $match['answer2'] )  $qa['answer2'] = $match['answer2'];


       array_push( $QA, $qa );

    }

else { 

    echo("Could not find a single question");  


print_R ( $QA);


?>

输出


Array

(

    [0] => Array

        (

            [question] => What is php

            [A] => Php is a language.

            [B] => Php creates HTML.

            [C] => Php is fun.

            [D] => none of these.

            [answer1] => D

        )


    [1] => Array

        (

            [question] => Linux is

            [A] => A Graphic Software

            [B] => A Driver

            [C] => A Line Controller Software

            [D] => An Operating System

            [answer1] => D

        )


    [2] => Array

        (

            [question] => Which feature helps in compress and contain the collection of files in to one

            [A] => Zip

            [B] => Shortcut

            [C] => Icon

            [D] => Extract

            [answer1] => A

        )


    [3] => Array

        (

            [question] => Which is YII-2

            [A] => Framework.

            [B] => Tool.

            [C] => None of these

            [answer1] => A

            [answer2] => B

        )


)


查看完整回答
反对 回复 2023-04-15
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信