以下代码是我用来从我的csv文件中获取整列数据的代码。 (有很多专栏,但我只需要#2)。此代码将所有数据放入名为$cbsmin
的数组中。我需要做的是跳过每个文件中的第一个数据,因为类别名称实际上并不是一个数据。
如何做到最好?
for($i=0;$i<count($files);$i++){
if (($handle = fopen($files[$i], "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$cbsmin[] = $data[2];
}
fclose($handle);
}
}
答案 0 :(得分:2)
只需使用简单的标记来标记它是否是第一行。如果是,则将标志重置为false并跳过该行。
$isfirst = true;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($isfirst)
{
$isfirst = false;
continue;
}
$cbsmin[] = $data[2];
}
答案 1 :(得分:2)
只需执行一次
fgetcsv($handle, 1000, ",");
在while循环之前。
答案 2 :(得分:0)
在进入while循环之前,只需要额外阅读
for($i=0;$i<count($files);$i++){
if (($handle = fopen($files[$i], "r")) !== FALSE) {
// eat the header
fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$cbsmin[] = $data[2];
}
fclose($handle);
}
}
我使用的另一种技术是使用标题行作为数据中的键。如果标题行随时间和文件之间的一致性,则此方法有效。
for($i=0;$i<count($files);$i++){
if (($handle = fopen($files[$i], "r")) !== FALSE) {
// eat the header
$header = fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$data = array_combine($header, $data);
$cbsmin[] = $data["Customer Name"];
}
fclose($handle);
}
}
如果你在很多领域做任何重要的事情,那就不得不使用字段偏移。