You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中将文本文件的问答数据拆分到数组中

问答文本拆分问题解决

问题现象

你有一个每行包含单个问答的文本文件,预期问题与答案用制表符(\t)分隔,但使用PHP代码拆分时,所有问题被合并到数组第一个元素,所有答案合并到第二个元素,无法拆分出单个问答对。

原因分析

从你的示例内容和输出结果来看,文件中实际的分隔符不是制表符(\t),而是多个连续空格。你用explode("\t", $line)拆分时,找不到制表符分隔点,所以每行的完整内容都被存入$line[0],循环输出就把所有问题连在了一起。

解决方案

方案1:用正则拆分多空格分隔的内容

直接匹配2个及以上的空白字符作为分隔符,拆分出问题和答案(避免拆分问题中的单个空格):

$fileHandler = fopen('triviaQuestions.txt', 'r');

if ($fileHandler) {
    while (($line = fgets($fileHandler)) !== false) {
        $line = trim($line);
        // 用2个及以上空白字符拆分,仅拆分为2部分
        list($question, $answer) = preg_split('/\s{2,}/', $line, 2);
        
        echo "问题:{$question}\n";
        echo "答案:{$answer}\n\n";
    }
    fclose($fileHandler);
}

方案2:先替换多空格为制表符再拆分

如果需要统一用制表符作为分隔符,可以先将文件中的多空格替换为制表符,再用原来的explode方法:

$fileHandler = fopen('triviaQuestions.txt', 'r');

if ($fileHandler) {
    while (($line = fgets($fileHandler)) !== false) {
        $line = trim($line);
        // 把多个连续空格替换成制表符
        $formattedLine = preg_replace('/\s{2,}/', "\t", $line);
        $parts = explode("\t", $formattedLine);
        
        if (count($parts) === 2) {
            echo "问题:{$parts[0]}\n";
            echo "答案:{$parts[1]}\n\n";
        }
    }
    fclose($fileHandler);
}

验证分隔符的方法

如果不确定文件中的实际分隔符,可以先输出转义后的内容来确认:

$fileHandler = fopen('triviaQuestions.txt', 'r');
if ($fileHandler) {
    while (($line = fgets($fileHandler)) !== false) {
        // 转义后显示实际字符,制表符会显示为	,空格显示为空格
        echo htmlspecialchars($line) . "\n";
    }
    fclose($fileHandler);
}

内容的提问来源于stack exchange,提问作者Yok T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:55:21