2013-08-19 4 views
6

У меня есть этот скрипт, который я сделал, он в основном захватывает все файлы в моей папке «logs» и объединяет их все в один файл массива, моя единственная проблема в том, что иногда скрипт ломается, если есть пустая строка или пустая строка! как я могу сказать, что он автоматически пропускает пустые пустые строки и переходит к следующему? пустые строки не обязательно вверху или внизу! может быть в середине файла CSVfgetcsv пропускает пустые строки в файле

<?php 
    $csv = array(); 
    $files = glob('../logs/*.*'); 
    $out = fopen("newfile.txt", "w"); 

    foreach($files as $file){ 
     $in = fopen($file, "r"); 

    while (($result = fgetcsv($in)) !== false) 

     { 
      $csv[] = $result; 
     } 

     fclose($in); 
     fclose($out); 
    } 

    print json_encode(array('aaData' => $csv)); 
?> 
+0

Возможно 'if (is_array ($ results) && count ($ result)) {$ csv [] = $ result; } ' – Orangepill

+2

@Orangepill:' fgetcsv() 'возвращает' array (null) ', когда строка пуста, поэтому, к сожалению,' is_array ($ result) && count ($ result) 'будет' true'. 'if ($ result! == array (null)) {$ csv [] = $ result; } 'должен делать трюк. –

+0

@TomasCreemers Это отлично поработало: D, пожалуйста, разместите его как ответ – hyperexpert

ответ

13

Как вы можете прочитать в documentation for fgetcsv():

пустая строка в файле CSV будут возвращены как массив, содержащий одно поле пустое, и не будет рассматриваться как ошибка.

Проверка, что перед добавлением его в массив данных должно быть достаточно:

while (($result = fgetcsv($in)) !== false) { 
    if (array(null) !== $result) { // ignore blank lines 
     $csv[] = $result; 
    } 
} 
+0

Спасибо, отлично поработал – hyperexpert

+0

Это решение не поймает случай «пустой» строки csv, не содержащей значений, например this ,, ,,,,,, ,, ', который будет переведен как массив с пустыми строковыми значениями – Pitt

+0

@Pitt. Вы правы. Я собирался использовать это решение, но он не работал, когда я его тестировал. В этом случае вы можете использовать принятый ответ из этого вопроса: https://stackoverflow.com/questions/5040811/checking-if-all-the-array-items-are-empty-php –

3

Это работает 100% тестирование, самый простой способ. Объяснение состоит в том, что пустые строки заставляют fgetcsv возвращать непустой массив с нулевым элементом внутри.

if ($result[0] == NULL) 
    continue;