我如何处理文本文件到一个数组


How do I process text file into an array?

我有一系列文本文件,我需要能够处理成一个数组,以便进一步处理数据并将其插入到数据库中。我可以处理结束处理和mysql.

这就是我被卡住的地方,我猜这是一些正则表达式的魔力,这是我的弱点。

我有一个文本文件,内容如下:

[Section 1]
Key:Value
Key:Value
Key:Value
Key:Value
[Section 2]
Key:Value
Key:Value
我需要把

放到一个数组中然后把它分成像

这样的数组
Array
(
[Section 1] => Array
    (
        [0] => Key:Value
        [1] => Key:Value
        [2] => Key:Value
        [3] => Key:Value
    )
[Section 2] => Array
    (
        [0] => Key:Value
        [1] => Key:Value
        [2] => Key:Value
    )
[Section 3] => Array
    (
        [0] => Key:Value
        [1] => Key:Value
    )
)

我可以处理数组的最后一部分,我只是不知道检测括号的第一部分并从那里将其分解

说明:

使用file()打开文件并将其读入数组。数组的每个元素都被循环并检查它是否包含[,如果包含…我们做一个preg_match(),并在方括号之间抓取文本。例如第1节,然后将其添加到临时变量$key中。

在连续的迭代中…元素将被添加到上面的键中…再次,如果遇到[,上述步骤将被考虑。

<?php
$arr = file('somefile.txt',FILE_IGNORE_NEW_LINES);
$key="";
foreach($arr as $line)
{
    if(strpos($line,'[')!==false)
    {
        preg_match('@'[(.*?)']@', $line, $matches);
        $key = trim($matches[1]);
    }
    else if(!empty($line))
    {
        $new_arr[$key][]=$line;
    }
}
print_r($new_arr);

您可以不使用正则表达式,像这样:

$lines = explode(PHP_EOL, $text);
$sections = array();
$section = '';
foreach ($lines as $line) {
    if (!trim($line)) continue;
    if ($line{0} == '[') {
        $section = trim(preg_replace("/'[(.+)']/", "$1", $line));
    } else {
        $sections[$section][] = $line;
    }
}