Php fgetcsv返回的条目太多
我有以下代码:Php fgetcsv返回的条目太多,php,unix,fgetcsv,Php,Unix,Fgetcsv,我有以下代码: while (!feof($file)) { $arrayOfIdToBodyPart = fgetcsv($file,0, "\t"); if (count($arrayOfIdToBodyPart)==2){ 问题是,文件的内容如下所示: 39 ankle 40 tibia 41 Vastus Intermedius 等等 有时,if中的测试将显示三个条目,第一个是数字,第二个是名称,第三个只是。。。e
while (!feof($file)) {
$arrayOfIdToBodyPart = fgetcsv($file,0, "\t");
if (count($arrayOfIdToBodyPart)==2){
问题是,文件的内容如下所示:
39 ankle
40 tibia
41 Vastus Intermedius
等等
有时,if中的测试将显示三个条目,第一个是数字,第二个是名称,第三个只是。。。emtpy
这导致if块失败,我感到悲伤。我知道我可以对>=2进行if块测试,但有没有办法让它只识别出有两个项目的事实?我不喜欢fgetcsv在结尾处发现“神秘”角色
这可能是运行基于windows的文件错误的unix服务器吗?如果是这样,我运行的ubuntu服务器没有dos2unix,我从哪里获得它?您可能在一行的末尾有选项卡:
value<tab>value<tab><newline>
valuevalue
如果是这种情况,dos2unix将不会帮助您。您可能需要将每一行读入一个变量,修剪()变量,然后使用str_getcsv()将其拆分。是否可能在这些行的末尾有一个选项卡?它们是看不见的,通常很难被发现。。。你可能想再检查一遍 另外,如果您使用的是csv文件,而您在本地运行windows且服务器是unix,我发现这行代码:
ini_set('auto_detect_line_endings', true);
省去了很多麻烦。+1对于代码/数据中出现的问题的情绪反应,请尝试对CSV文件进行一次分析,看看文件的内容是否符合您的期望;实际内容可能与您最初的假设不同。有必要使用十六进制编辑器而不是文本编辑器来实现这一点,因为文本编辑器并不总是能够区分PHP处理方式不同的字节。我猜是NL字符(\n)之前的CR字符(\r)。使用
dos2unix文件名
清理它们。祝你好运