Php 以奇怪的格式处理csv文件
我正在使用phpmyadmin的“加载数据”功能,通过上传csv文件来更新(或更新)我数据库中的一些数据。csv文件有50列和200k行。这种格式非常有效,速度非常快:Php 以奇怪的格式处理csv文件,php,mysql,csv,phpmyadmin,Php,Mysql,Csv,Phpmyadmin,我正在使用phpmyadmin的“加载数据”功能,通过上传csv文件来更新(或更新)我数据库中的一些数据。csv文件有50列和200k行。这种格式非常有效,速度非常快: 100;101;102;103;104;.... Alfred;Mueller;Exampplestreet 1;12121;Chicago;.... John;Wiliams;Exampplestreet 2;12345;Dallas;.... Mandy;Peterson;Exampplestreet 3;44554;LA;
100;101;102;103;104;....
Alfred;Mueller;Exampplestreet 1;12121;Chicago;....
John;Wiliams;Exampplestreet 2;12345;Dallas;....
Mandy;Peterson;Exampplestreet 3;44554;LA;....
...
现在我有机会通过接收数据提供者的csv数据文件来完全自动化这个过程。但数据提供商提供了如下csv文件:
100#Alfred;101#Mueller;102#Exampplestreet 1;103#12121;104#Chicago;....
100#John;101#Wiliams;102#Exampplestreet 2;103#12345;104#Dallas;....
100#Mandy;101#Peterson;102#Exampplestreet 3;103#44554;104#LA;....
是否有机会处理提供程序的格式?我从未使用过这种格式的csv文件?看起来您需要从每个值中提取字段类型,不确定这是否相关,但我已将其转换为字段的键,以防您需要它(反正差别不大) 基本上,将每一行读取为CSV行(以
;
分隔),然后将每个字段分解()
读取为#
,如果有两个字段,则将其添加到输出数组($data
)
输出将类似于
Array
(
[100] => Alfred
[101] => Mueller
[102] => Exampplestreet 1
[103] => 12121
[104] => Chicago
)
如果您不需要字段类型,并且字段类型始终为三个字符后跟一个
,则可以通过更新读取数组的值来缩短字段类型,使用substr()
始终删除前四个字符
while ( !feof($handle) ) {
$data = fgetcsv( $handle, null, ";" );
foreach ( $data as &$value ) {
$value = substr($value, 4);
}
print_r($data);
}
这显然比直接加载要慢(您需要在上面添加数据库调用)。感谢Nigel,我将以这种方式进行测试。问题是要运行20万条线路需要多长时间:(不知道需要多长时间,这取决于您的数据库和硬件。您也应该为SQL使用准备好的语句。
while ( !feof($handle) ) {
$data = fgetcsv( $handle, null, ";" );
foreach ( $data as &$value ) {
$value = substr($value, 4);
}
print_r($data);
}