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