将.txt文件内容读入php多维数组

时间:2017-11-15 07:12:14

标签: php arrays multidimensional-array text-files notepad

我有一个包含这样内容的.txt文件

  1. 阿布贾,联邦首都地区有 - - - - 地区委员会 A. 4
    B. 6
    C. 7
    D. 2
    答案:B

  2. 联邦首都地区与 - - - - - - 植被带相关联 A. Sahel savanna
    B.雨林
    C.几内亚稀树草原 D.苏丹稀树草原
    答案:C


  3. 造成不断增加的FCT人口的最重要因素是 A.高出生率
    B.移民 C.死亡率
    D. CENSUS
    答案:B

  4. 我希望将文件内容读入多维数组中,这样我就能得到每个问题,答案以及每个问题的正确答案。

    我试过这个: -

    $array=explode("\n", file_get_contents('file.txt')); 
    print_r($array);
    

    但它并没有给我我想要的东西..

2 个答案:

答案 0 :(得分:1)

Try This..

$array=explode("\n", file_get_contents('file.txt'));
$array = array_filter(array_map('trim',$array));
$chunk_array = array_chunk($array, 6);
foreach($chunk_array as $key => $value){
    $final_array[$key]['question'] = $value[0];
    $final_array[$key]['options'] = array_slice($value, 1, -1);
    $final_array[$key]['answer'] = end($value);
}
echo '<pre>'; 
print_r($final_array);
echo '</pre>';

答案 1 :(得分:1)

Alives回答给出了你可能可以使用的结果,但我认为关联数组可能是要走的路。

我查看每一行,看它是否有问号=&gt;在数组中添加带有问题编号和问题文本的新项目。

如果第一个字母是字母而第二个字母是点,那么答案=&gt;将答案字母添加为键,将文本添加为​​值。

如果上面没有任何答案文本=&gt;使用ANSWER添加密钥并将值作为正确答案。

我使用explode分割线条。第三个参数说明将字符串拆分的部分。
使用&#34; 2&#34;它在第一个空格处分裂意味着我将问题#作为项目1并将问题文本作为项目2在数组中。

https://3v4l.org/ZqppN

// $str = file_get_contents("text.txt");
$str = "1. Abuja, the Federal Capital Territory has -- -- -- -- -- area Council
A. 4
B. 6
C. 7
D. 2
ANSWER: B

2. The Federal Capital Territory is associated with-- -- -- -- -- -- -- vegetation belt
A. Sahel savanna
B. Rainforest
C. Guinea savanna
D. Sudan savanna
ANSWER: C

3. The most significant factor responsible for the ever increasing population of FCT is
A. High birth rate
B. Immigration
C. Death rate
D. CENSUS
ANSWER: B";

$arr = explode("\n", $str);

$res=[];

Foreach($arr as $line){
    If($line != ""){
        If(is_numeric($line[0])){
            Preg_match("/^\d+/", $line, $num);
            $res[$num[0]] =["QUESTION" =>explode(" ", $line,2)[1]];
            $q = $num[0];
        }Else if(ctype_alpha($line[0]) && $line[1] == "."){
            $res[$q][$line[0]] = explode(" ", $line, 2)[1];
        }Else{
            $res[$q]["ANSWER"] = trim(explode(":", $line, 2)[1]);
        }
    }
}

Var_dump($res);