Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php fgetcsv返回的条目太多_Php_Unix_Fgetcsv - Fatal编程技术网

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文件名
清理它们。祝你好运