【发布时间】:2014-01-27 08:57:00
【问题描述】:
我开发了一些 php 代码来读取 csv 文件(通过 fgetcsv() ),验证文件中的(自定义)标题,处理以下数据负载并将结果保存到数据库中。代码运行良好,但由于我没有将代码分解为函数而变得非常大(所有提到的操作都在典型的 while 循环中,如已知的 www.php.net/fgetcsv 的第一个示例)。
所以我想通过分解函数来重新组织我的代码,实际上是用方法定义一个类,我想知道我是否仍然需要while循环来访问整个文件,或者我是否可以使用fgetcsv() 具有以下示例中的各种方法?:例如在各种方法中依次调用 fgetcsv()。我不确定 fgetcsv() 在读取一行时是否会更改文件处理程序(指针)的值,因为我无法在手册 www.php.net/fgetcsv 或本网站的其他内容中找到它。
简化代码示例:
class Mycsvfile {
$filehandle;
function __construct($filename){} //opens the $file with a name; sets $filehandle
function isValidHeader(){} //checks customised header; calls fgetcsv()
function processPayload(){} //processes the data payload after the header; calls fgetcsv() and database storage functions
function close(){} //closes the csv file
}
$myfile = new Mycsvfile('aname');
if($myfile->isValidHeader){
$myfile->processPayload();
}
$myfile->close();
【问题讨论】:
-
我建议创建一个迭代器来解析文件,检查文档中的此注释以获取示例fr2.php.net/fgetcsv#57802,是的,它确实改变了指针
-
它除了从句柄读取之外什么都不做:github.com/php/php-src/blob/…
-
这个问题似乎跑题了,因为它属于codereview.stackexchange.com
-
感谢所有 cmets (!)。 @Blender:如果它不做任何事情, fgetcsv() 如何确定下一行是什么? (参考 php.net/fgetcsv 中的 'while (($data = fgetcsv($handle, 1000, ",")) !== FALSE){}' 示例)
标签: php