将CSV文件解析为数组,注释位于顶部

时间:2011-11-17 16:35:34

标签: php parsing csv hash extract

以下是我可能需要导入数据库的可能文本文件的模板:

#NAME:"Test"
#REV:"rev1"
#PRODUCT:"product1","description1","option1"
#PRODUCT:"product2","description2","option1","option2"
"A1","key1","DALI"
"B1","key2",""
"B2","key3","option2"
"C1","key4",""

前4行是这些文件格式的新增功能。我在成功添加注释行之前成功导入了逗号分隔数据。

我想知道是否有人能够为我提供最有效的方法,将评论行中的所有值都放入PHP中的变量中。

对于RegEx,我总是遇到一些麻烦。我不知道如何最好地抓住以#开头的行。 基本上,我想向我提供以下数据:

$csv['name']: "Test";
$csv['rev']: "rev1";
$csv['products']: array(
    0 => array('name' => "product1", 'desc' => "description1", 'options' => "option1"),
    1 => array('name' => "product2", 'desc' => "description2", 'options' => "option1,option2"),
);
$csv['data']: The rest of the data in text file

可能会定义多个#PRODUCTS,这就是为什么从这些行创建一个数组会很好。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

你使用的是php 5.3吗?如果是这样,那么您可以使用fgets()读取文件,并使用substr($ line,0,1)检测注释。如果您没有检测到#,则表示它是数据行,然后将其传递给str_getcsv()......

干杯

答案 1 :(得分:0)

要匹配以#开头的内容,只需在regexp开头使用^(在组外)