我有一系列文本文件,我需要能够处理成一个数组,以便进一步处理数据并将其插入数据库。我可以处理结束处理和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
)
)
我可以处理数组的最后一部分,我只是无法弄清楚检测括号的第一部分并将其从那里分解
答案 0 :(得分:4)
使用file()
打开文件并将其读入数组。数组的每个元素都循环并检查它是否包含[
,如果它包含..我们做preg_match()
并抓住方括号之间的文本..说第1节然后将em>添加到临时变量$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;
}
}