Fgetcsv循环并获得正确的值

时间:2012-11-09 21:11:06

标签: php mysql

我有一个txt文件,我需要将它上传到我的mysql数据库中。所以我在php.net中找到了这段代码:

$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}

有效。当我给'print_r'时,我有这个:

PAGE:1
ANUALDATA
Ver:1.651.A
Site data ou www.sitedata.com
COUNT:3758-3 NAME:USER NAME IDUS: 262.911.258-62
PLACE:030 IDCUS:11003 
DATE 31/12/2011
VALUE................................U$ 200,00
PROCESS DATE 31/12/2011
VALUE NEEDED.....................U$ 3,45
PAID VALUE..........U$ 50,00
PAGE:2
ANUALDATA
Ver:1.651.A
Site data ou www.sitedata.com
COUNT:3758-3 NAME:USER NAME IDUS: 262.911.258-62
PLACE:030 IDCUS:11003 
DATE 31/12/2011
VALUE................................U$ 200,00
PROCESS DATE 31/12/2011
VALUE NEEDED.....................U$ 3,45
PAID VALUE..........U$ 50,00
PAGE:3
ANUALDATA
Ver:1.651.A
Site data ou www.sitedata.com
COUNT:3758-3 NAME:USER NAME IDUS: 262.911.258-62
PLACE:030 IDCUS:11003 
DATE 31/12/2011
VALUE................................U$ 200,00
PROCESS DATE 31/12/2011
VALUE NEEDED.....................U$ 3,45
PAID VALUE..........U$ 50,00

现在出现了我的问题。我看到了其他的例子,但真的可以用它来做我的情况。 我需要做一些事情,比如改变$ key = $ val中的每一行,比如

[VALUE] => 200,00
[PROCESS DATE] =>31/12/2011

你会注意到这是页面,我需要把它制成像这样的东西

[0]
    [VALUE] => 200,00
    [PROCESS DATE] =>31/12/2011
[1]
    [VALUE] => 200,00
    [PROCESS DATE] =>31/12/2011

因此,我将在db中的每一行中插入此数据。有办法吗? 如果我只能获得de $ value,那也可以。

修改

它不是CSV,它是另一个系统创建的TXT,我无法控制它。

2 个答案:

答案 0 :(得分:0)

不知道这是否是代码段的结果,我无法看到echo "<p> $num fields in line $row: <br /></p>\n";的打印输出。此外,它似乎是分隔符“:”(假设它不会出现在文本中的任何其他位置)。那就说,试试这个......

$row = 1;
$res = array();
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        $row++;
        $tmpArr = array();
        for ($c=0; $c < $num; $c++) {
            list($key, $val) = explode(":", $data[$c]);
            $tmpArr[$key] = $val;
        }
        $res[] = $tmpArr;
    }
    fclose($handle);
}
print_r($res);

答案 1 :(得分:0)

如果你只想将它加载到MySQL中,你有没有看过LOAD DATA INFILE?

http://dev.mysql.com/doc/refman/5.5/en/load-data.html

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES;