2013-08-19 31 views
6

Tôi có tập lệnh này mà tôi đã làm, về cơ bản lấy tất cả các tệp trong thư mục "nhật ký" của tôi và hợp nhất tất cả trong một tệp mảng, vấn đề duy nhất của tôi là là dòng trống hoặc dòng trống! làm thế nào tôi có thể yêu cầu nó tự động bỏ qua các dòng trống rỗng và chuyển sang tiếp theo? dòng trống không nhất thiết phải ở trên cùng hoặc dưới cùng! có thể là ở giữa của tập tin csvfgetcsv bỏ qua dòng trống trong tập tin

<?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

Có thể 'if (is_array ($ results) && count ($ result)) {$ csv [] = $ result; } ' – Orangepill

+2

@Orangepill:' fgetcsv() 'trả về' mảng (null) 'khi dòng trống, vì vậy không may,' is_array ($ result) && count ($ result) 'sẽ là' true'. 'if ($ result! == mảng (null)) {$ csv [] = $ kết quả; } 'nên làm các trick. –

+0

@TomasCreemers Điều đó làm việc tuyệt vời: D bạn vui lòng đăng nó như là một câu trả lời – hyperexpert

Trả lời

13

Như bạn có thể đọc trong documentation for fgetcsv():

Một dòng trống trong một tập tin CSV sẽ được trả lại như một mảng gồm một lĩnh vực vô duy nhất, và sẽ không được coi là lỗi.

Kiểm tra cho rằng trước khi thêm nó vào mảng dữ liệu của bạn nên là đủ:

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

Cảm ơn bạn, đã làm việc tuyệt vời – hyperexpert

+0

giải pháp này sẽ không bắt trường hợp của một dòng 'csv' trống không chứa giá trị, như thế này ',,,,,, ,, 'sẽ được dịch thành một mảng có giá trị chuỗi rỗng – Pitt

+0

@Pitt Bạn nói đúng. Tôi đã sử dụng giải pháp này nhưng nó không hoạt động khi tôi thử nghiệm nó. Trong trường hợp đó, bạn có thể sử dụng câu trả lời được chấp nhận từ câu hỏi này: https://stackoverflow.com/questions/5040811/checking-if-all-the-array-items-are-empty-php –

3

này hoạt động 100% thử nghiệm, cách đơn giản nhất. Lời giải thích là các dòng trống làm cho fgetcsv trả về một mảng không trống với chỉ một phần tử null bên trong.

if ($result[0] == NULL) 
    continue; 
Các vấn đề liên quan