ugrás a tartalomhoz

CSV-ből beolvasott adatok validálása

walko · 2009. Már. 30. (H), 10.05
Sziasztok,

Szeretném a segítségeteket kérni a következő feladat megoldásában. Van egy CSV file-ből beolvasott 11 elemű tömböm. Validálni szeretném a következő elemeit:
0. elem csak szám és kötelező
7. elem csak szám és kötelező
8-9-10. elemek csak szám és lehet üres elem (NULL, azaz a csv file-ban nem volt semmi két pontos vessző között)

Hogy lehetne ez szépen elegánsan megoldani?
Segítségeteket előre is köszönöm.
 
1

Ilyesmi

Poetro · 2009. Már. 30. (H), 10.51
  1. <?php  
  2. $handle = fopen("test.csv""r");  
  3. $row = 0;  
  4. $needed_rows = 11;  
  5. $validated = array();  
  6. while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {  
  7.   $row++;  
  8.   if ($needed_rows != count($data)) {  
  9.     foreach ($data as $index => $value) {  
  10.       $errors = array();  
  11.       switch ($index) {  
  12.         case 0:  
  13.         case 1:  
  14.           if (strlen($value) == 0 || !is_numeric($value)) {  
  15.             $errors[] = sprintf("%d column does not contain a number, contains '%s' instead",  
  16.                                 $row, $index + 1, $value);  
  17.           }  
  18.           break;  
  19.         case 8:  
  20.         case 9:  
  21.         case 10:  
  22.           if (!empty($value) && !is_numeric($value)) {  
  23.             $errors[] = sprintf("%d column does not contain a number, contains '%s' instead",  
  24.                                 $row, $index + 1, $value);              
  25.           }  
  26.           break;  
  27.       }  
  28.         
  29.       if (empty($errors)) {  
  30.         $validated[] = $data;  
  31.       }  
  32.       else {  
  33.         printf("Row %d contains the following errors:\n\t%s", $row, implode("\n\t", $errors));  
  34.       }  
  35.     }  
  36.   }  
  37.   else {  
  38.     printf('Row %d contains %d rows instead of the needed %d', $row, count($data), $needed_rows);  
  39.   }  
  40. }  
  41. fclose($handle);  
  42. ?>  
2

köszönöm

walko · 2009. Már. 30. (H), 11.06
Nagyon köszönöm a gyors, pontos és érthető választ Poetro!
:)
Klasszul működik!