提取行块并将每行作为单独变量

时间:2015-02-09 14:00:51

标签: php mysql text

我有一个.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";

}

但是正在选择整个内容。

你能帮帮我吗?

2 个答案:

答案 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_combineuse($fields)

注意:如果文件采用Windows格式,请将\n\n更改为\r\n\r\n