2012-06-06 4 views
1

업로드 된 CSV 파일을 PHP의 배열로 처리하려고합니다. 그 잘 작동하지만 사용자의 일부 파일 끝에 구분 기호가 빈 행이 있습니다. 일반적으로 기존 파일에서 Excel을 사용할 때 발생합니다. 오래된 셀을 선택하고 지우는 것.빈 줄에서 PHP CSV 파일 중지

샘플 CSV 파일

 
lineNo,date,vendor,amount 
1,5/2/2012,V000236,3727.21 
2,5/2/2012,V003432,4826.19 
,,, 
,,, 

난 그냥 빈 행을 제거하지 않으

Array 
(
    [0] => Array 
     (
      [0] => lineNo 
      [1] => date 
      [2] => vendor 
      [3] => amount 
     ) 

    [1] => Array 
     (
      [0] => 1 
      [1] => 5/2/2012 
      [2] => V000236 
      [3] => 3727.21 
     ) 

    [2] => Array 
     (
      [0] => 2 
      [1] => 5/2/2012 
      [2] => V003432 
      [3] => 4826.19 
     ) 

    [3] => Array 
     (
      [0] => 
      [1] => 
      [2] => 
      [3] => 
     ) 

    [4] => Array 
     (
      [0] => 
      [1] => 
      [2] => 
      [3] => 
     ) 
)

, 나는 내에서 배열 인덱스 후 2. 쉽게 중지하려면 다음과 같은 배열을이되다 기능 나는 새로운 해요 :

function csvToArray($csvFile, $specialChars = FALSE) { 
$arrayCSV = array(); 

if (($csvHandle = fopen($csvFile, "r")) !== FALSE) { // Open the CSV 
    $csvKey = 0; // Set the parent array key to 0 

    while (($csvData = fgetcsv($csvHandle)) !== FALSE) { 
     $c = count($csvData); // Count the total keys in each row 

     //need something to stop on blank delimiter rows ,,, 

     for ($x = 0; $x < $c; $x++) { //Populate the array 
      if ($specialChars === TRUE) { 
       $arrayCSV[$csvKey][$x] = htmlspecialchars($csvData[$x]); 
      } else { 
       $arrayCSV[$csvKey][$x] = $csvData[$x]; 
      } 
     } 
     $csvKey++; 
    } 

    fclose($csvHandle); 
} 

return $arrayCSV; 
} 

궁극적으로 P, 나는이

을 반환하고 싶습니다
Array 
(
    [0] => Array 
     (
      [0] => lineNo 
      [1] => date 
      [2] => vendor 
      [3] => amount 
     ) 

    [1] => Array 
     (
      [0] => 1 
      [1] => 5/2/2012 
      [2] => V000236 
      [3] => 3727.21 
     ) 

    [2] => Array 
     (
      [0] => 2 
      [1] => 5/2/2012 
      [2] => V003432 
      [3] => 4826.19 
     ) 
)

답변

1

수 없습니다 당신 break; 즉시 빈 값을 찾기로 while 루프?

if (($csvHandle = fopen($csvFile, "r")) !== FALSE) { // Open the CSV 
    $csvKey = 0; // Set the parent array key to 0 

    while (($csvData = fgetcsv($csvHandle)) !== FALSE) { 
     $c = count($csvData); // Count the total keys in each row 

     // ## Flag variable ########## 
     $empty = true; 

     for ($x = 0; $x < $c; $x++) { //Populate the array 

      // ## Test each value ########## 
      $empty = $empty && (empty($csvData[$x])); 

      if ($specialChars === TRUE) { 
       $arrayCSV[$csvKey][$x] = htmlspecialchars($csvData[$x]); 
      } else { 
       $arrayCSV[$csvKey][$x] = $csvData[$x]; 
      } 
     } 

     // ## Stop loop if all empty ########## 
     if ($empty) { 
      unset($arrayCSV[$csvKey]); 
      break; 
     } 
     $csvKey++; 

    } 

    fclose($csvHandle); 
} 
+0

이 마지막 배열에서 설정을 해제했습니다. 감사합니다! – AugustLindholm

+0

@ user1439738 좋아, 이제 알았다. 수정 해 주셔서 감사합니다;) –

1

참고

CSV 파일 빈 행이 단일 필드를 포함하는 배열로 반환하고 에러로 간주되지 않는다.

if ($c == 1 && current($csvData) === null) { 
     break; 
    }