Php Regex将文本月份更改为数字
我有一个巨大的CSV文件(10万条记录),格式如下Php Regex将文本月份更改为数字,php,mysql,regex,csv,import,Php,Mysql,Regex,Csv,Import,我有一个巨大的CSV文件(10万条记录),格式如下 147804,AC,34,15AUG09,09:00,15AUG09,21:00,YYZ,YVR,PLS 147816,AC,34,26AUG09,09:00,01SEP09,21:00,YYZ,YVR,PLS 我需要将它们导入mysql数据库。如何将所有月份更改为数字月份,最好更改为yyyy/mm/dd格式。 谢谢令人惊讶的是,这似乎起到了作用: echo date('Y/m/d', strtotime('15AUG09')); 返回:2
147804,AC,34,15AUG09,09:00,15AUG09,21:00,YYZ,YVR,PLS
147816,AC,34,26AUG09,09:00,01SEP09,21:00,YYZ,YVR,PLS
我需要将它们导入mysql数据库。如何将所有月份更改为数字月份,最好更改为yyyy/mm/dd格式。
谢谢令人惊讶的是,这似乎起到了作用:
echo date('Y/m/d', strtotime('15AUG09'));
返回:2009/08/15
如果你能设法解析你的CSV,你将以你想要的格式获得你的日期。令人惊讶的是,这似乎可以做到:
echo date('Y/m/d', strtotime('15AUG09'));
返回:2009/08/15
如果你能设法解析你的CSV,你将以你想要的格式获得你的日期。这很难用正则表达式完成,而且很容易出错。PHP内置了CSV支持,而且更安全
<?php
if (($if = fopen("src_file.csv", "r")) !== FALSE) {
if (($of = fopen("dst_file.csv", "w")) !== FALSE) {
while (($cols = fgetcsv($if)) !== FALSE) {
$cols[3] = date('Y/m/d',strtotime($cols[3]));
$cols[5] = date('Y/m/d',strtotime($cols[5]));
fputcsv($of, $cols);
}
fclose($of);
}
fclose($if);
}
?>
我不知道只在数据库中存储
$cols
或者创建一个新文件并导入它是否更有效。我没有任何基准测试。使用正则表达式很难实现这一点,而且很容易出错。PHP内置了CSV支持,而且更安全
<?php
if (($if = fopen("src_file.csv", "r")) !== FALSE) {
if (($of = fopen("dst_file.csv", "w")) !== FALSE) {
while (($cols = fgetcsv($if)) !== FALSE) {
$cols[3] = date('Y/m/d',strtotime($cols[3]));
$cols[5] = date('Y/m/d',strtotime($cols[5]));
fputcsv($of, $cols);
}
fclose($of);
}
fclose($if);
}
?>
我不知道只在数据库中存储
$cols
或者创建一个新文件并导入它是否更有效。我没有任何基准。这可以在没有正则表达式的情况下完成,可能更干净-只需使用PHP的CSV解析函数解析它,分割日期,写回值,就可以了。您是否已经确定正则表达式是最适合您的问题的解决策略?这可以在没有正则表达式的情况下完成,可能更干净-只需使用PHP的CSV解析函数解析它,分割日期,写回值,您是否已经确定正则表达式是最适合您的问题的解决方案策略?非常好,非常感谢。我原以为这样会耗尽内存,但fgetcsv似乎一次只做一点。15分钟内转换了1500万张唱片:)太好了,非常感谢。我原以为这样会耗尽内存,但fgetcsv似乎一次只做一点。15分钟内转换1500万条记录:)