PHP CSV提取匹配行只运行一次,速度较慢
我在一组ID中循环,并将它们与src CSV文件进行比较,当它找到匹配的ID时,会将其放入新的dest CSV文件中 src CSVPHP CSV提取匹配行只运行一次,速度较慢,php,csv,Php,Csv,我在一组ID中循环,并将它们与src CSV文件进行比较,当它找到匹配的ID时,会将其放入新的dest CSV文件中 src CSV ids,value,color 1,value1 ,red 2,value2,oramge 3,value3,blue 4,value4,purple 5,value5,pink 6,value6,yellow 7,value7,green 8,value8,black 9,value9,white php $ids = array( "7", "9", "3"
ids,value,color
1,value1 ,red
2,value2,oramge
3,value3,blue
4,value4,purple
5,value5,pink
6,value6,yellow
7,value7,green
8,value8,black
9,value9,white
php
$ids = array(
"7",
"9",
"3"
);
$srcFile = fopen("src.csv", "r");
$destFile = fopen("dest.csv","w");
foreach ($ids as $id) {
while (($row = fgetcsv($srcFile, 0, ",")) !== FALSE) {
if ($row[0] == $id) {
fputcsv($destFile, $row);
}
}
}
fclose($srcFile);
fclose($destFile);
我遇到的问题是,它只运行一次,并在找到第一个匹配项后退出。另外,如果我用一千条记录来代替,我不确定这个方法的效率
哪里出错了?用于检查数组中是否存在csv行id
你应该试试下面的代码-
PHP
<?php
$ids = array(
"7",
"9",
"3"
);
$srcFile = fopen("src.csv", "r");
$destFile = fopen("dest.csv","w");
while (($row = fgetcsv($srcFile, 0, ",")) !== FALSE) {
echo $row[0];
if (in_array($row[0], $ids)) {
fputcsv($destFile, $row);
}
}
fclose($srcFile);
fclose($destFile);
?>
用于检查数组中是否存在csv行id
你应该试试下面的代码-
PHP
<?php
$ids = array(
"7",
"9",
"3"
);
$srcFile = fopen("src.csv", "r");
$destFile = fopen("dest.csv","w");
while (($row = fgetcsv($srcFile, 0, ",")) !== FALSE) {
echo $row[0];
if (in_array($row[0], $ids)) {
fputcsv($destFile, $row);
}
}
fclose($srcFile);
fclose($destFile);
?>
可能是因为您在对数组中的每个ID执行
循环时重复了。尝试像这样使用代码,并使用以下命令搜索ID:
可能是因为您在对数组中的每个ID执行循环时重复了。尝试像这样使用代码,并使用以下命令搜索ID:
您的源CSV总是要被排序吗?问题是您在磁盘访问函数(fgetcsv
和fputcsv
)上循环,这些函数的速度比仅使用内存的操作慢。尝试将整个源文件放入一个数组,并在该数组上执行搜索,将“找到的”值放入一个新数组。然后在末尾将新阵列写入磁盘<代码>$vals=array_map('str_getcsv',file('./src.csv')
源CSV总是要被排序吗?问题是你在磁盘访问函数(fgetcsv
和fputcsv
)上循环,这些函数的速度比仅使用内存的操作慢。尝试将整个源文件放入一个数组,并在该数组上执行搜索,将“找到的”值放入一个新数组。然后在末尾将新阵列写入磁盘<代码>$vals=array_map('str_getcsv',file('./src.csv')代码>