我有一个.txt文件,其中包含许多以五行为一块的行。像这样的
意大利的首都是什么
地理
简易难度
马德里
罗马
柏林
威尼斯
乌克兰首都是什么
地理
简易难度
伦敦
布拉格
基辅
都柏林
[还有更多…]
正如您所看到的,每个块都被一条空的虚线分隔开。
我想分别提取每个块,第一行返回一个包含问题的变量,第二行返回另一个具有问题类别的变量,接下来是问题的难度,等等。。。我需要在sql的不同列中插入每一行。
我尝试了这个代码示例
$file=爆炸(",file_get_contents("db.txt"));foreach($file作为$content){$result[]=array_filter(array_map("trim",爆炸(",",$content));//var_dump($result);echo"$content";}
而是选择块的整个内容。
你能帮我吗?
使用file
将文本转换为行数组,然后使用array_chunk
将该数组分组为7的子数组。
$quiz_lines = file('path/to/quiz.txt', FILE_SKIP_EMPTY_LINES );
$questions = array_chunk($quiz_lines, 7);
然后,您可以在每个区块上使用array_combine
来设置密钥:
$question_keys = array(
'question','category','difficulty','answer1', 'answer2','answer3','answer4'
);
foreach($questions as &$question_parts) {
$question_parts = array_combine($question_keys, $question_parts);
}
爆炸的一种方法:
$txt = trim(file_get_contents($filepath));
$result = explode("'n'n", $txt);
$fields = ['question', 'category', 'difficulty', 'answer 1', 'answer 2', 'answer 3', 'answer 4'];
$result = array_map(function ($i) use ($fields) {
return array_combine($fields, explode("'n", $i));
}, $result);
如果不需要生成关联数组的项,可以在回调函数中删除array_combine
和use($fields)
。
注意:如果文件具有windows格式,请将'n'n
更改为'r'n'r'n