【问题标题】:Extract block of lines and get each line as a individually variable提取行块并将每一行作为单独的变量
【发布时间】:2015-02-09 14:00:51
【问题描述】:

我有一个 .txt 文件,其中包含很多行,以五行为一组。 像这样的

意大利的首都是哪里?
地理
简单难度
马德里
罗马
柏林
威尼斯

乌克兰的首都是哪里?
地理
简单难度
伦敦
布拉格
基辅
都柏林

[还有更多...]

如您所见,每个块都由一个空的换行符分隔。

我想分别提取每个块,其中第一行返回一个包含问题的变量,第二行是另一个带有问题类别的变量,接下来是问题的难度,等等... 我需要将每一行插入到不同的 sql 列中。

我试过这个代码示例

$file = explode(" ", file_get_contents("db.txt")); foreach ( $file 作为 $content ) { $result[] = array_filter(array_map("trim", explode(",", $content))); //var_dump($result); 回声“$内容”; }

但正在选择块的全部内容。

你能帮我解决这个问题吗?

【问题讨论】:

  • 使用file()函数,它将文件读入数组——每一行作为一个数组行
  • 你为什么使用explode()

标签: php mysql text


【解决方案1】:

使用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);
 }

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 2011-06-26
      • 2019-03-17
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多