如何将文本文件处理成数组?

时间:2014-05-09 18:59:44

标签: php arrays regex

我有一系列文本文件,我需要能够处理成一个数组,以便进一步处理数据并将其插入数据库。我可以处理结束处理和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
    )

)

我可以处理数组的最后一部分,我只是无法弄清楚检测括号的第一部分并将其从那里分解

2 个答案:

答案 0 :(得分:4)

说明:

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

答案 1 :(得分:0)

你可以在没有正则表达式的情况下做到这一点:

$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;
    }
}