我有一个.txt文件,其中包含许多以五行为一组的行。 像这样的东西
意大利的首都是什么?
地理
容易困难
马德里
罗马
柏林
威尼斯
乌克兰的首都是什么?
地理
容易困难
伦敦
布拉格
基辅
都柏林
[还有更多......]
如您所见,每个区块都由空的分隔线分隔。
我想分别提取每个块,其中第一行返回包含问题的变量,第二行是另一个带有问题类别的变量,接下来是问题的难度等等... 我需要在sql的不同列中插入每一行。
我尝试使用此代码示例
$file = explode(" ", file_get_contents("db.txt")); foreach ( $file as $content ) { $result[] = array_filter(array_map("trim", explode(",", $content))); //var_dump($result); echo "$content"; }
但是正在选择整个内容。
你能帮帮我吗?
答案 0 :(得分:3)
使用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);
}
答案 1 :(得分:2)
爆炸的方式:
$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