fgetcsv возвращает слишком много записей - PullRequest
3 голосов
/ 07 марта 2012

У меня есть следующий код:

while (!feof($file)) {
        $arrayOfIdToBodyPart = fgetcsv($file,0, "\t");
            if (count($arrayOfIdToBodyPart)==2){

проблема в том, что содержимое файла выглядит так:

39      ankle
40      tibia
41      Vastus Intermedius

и т. Д.

иногда тест в if будет показывать три записи, первая из которых будет числом, вторая будет именем, а третья просто ... emtpy.

Это приводит к сбою блока if, и мне грустно. Я знаю, что могу просто выполнить тест блока if для> = 2, но есть ли способ заставить его распознать тот факт, что есть два элемента? Мне не нравится, что fgetcsv находит «загадочные» символы в конце строки.

Возможно, это Unix-сервер с ошибкой файла Windows? Если это так, и я использую сервер Ubuntu без dos2unix, где я могу его получить?

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

Возможно ли, что у вас есть вкладка в конце этих строк? Они невидимы, и их часто трудно обнаружить ... возможно, вы захотите перепроверить.

Также, если вы работаете с CSV-файлами, в то время как вы работаете с Windows локально, а сервер работает на Unix, я нашел следующую строку:

ini_set('auto_detect_line_endings', true);

избавляет от многих головных болей.

0 голосов
/ 07 марта 2012

Возможно, у вас есть вкладки в конце строки:

value<tab>value<tab><newline>

Если это так, dos2unix вам не поможет.Возможно, вам придется сделать что-то вроде чтения каждой строки в переменную, trim () переменной, а затем использовать str_getcsv () для ее разделения.

...