PHP fgetcsv()陷阱
我经常发现自己需要将数据从CSV文件提取到系统中。这可能是填写诸如邮政编码之类的基本数据,或者是使用新内容更新网站。我碰巧使用的系统决定了我如何导入CSV文件,但是通过使用该fgetcsv()函数,在PHP中编写快速解析器非常容易。
不幸的是,当使用此功能时,很容易错过一些非常重要的事情,并创建了非常无用的代码。请看下面的例子。乍一看似乎很好,但是代码的输出始终是运行一次然后停止。
$fh = fopen('awesome_csv_data.csv', "r"); while ($data = fgetcsv($fh, 0, ',') !== FALSE) { echo count($data); //==1 var_dump($data); //==真 } fclose($fh);
在上面的代码中将$data变量设置为TRUE。这是因为我们将$data的值设置为“fgetcsv($fh,0,',')!==FALSE”的比较结果。为了避免这种优先顺序,我们只需要包装返回值,fgetcsv()然后在比较中使用它即可。
第一个例子应该这样写:产生正确的结果。
$fh = fopen('awesome_csv_data.csv', "r"); while (($data = fgetcsv($fh, 0, ',')) !== FALSE) { echo count($data); //==找到的记录数 var_dump($data); //==数据 } fclose($fh);
这是学习PHP中优先顺序的重要课程,值得一看,如果您的代码工作不正常,则值得一试。第一次遇到这个问题之后,直到我花了15分钟检查while循环中的CSV文件和代码中是否有错误,然后才发现我做错了什么。