note 79049 deleted from function.fgetcsv by danbrown

From: Date: Sun, 17 May 2009 18:09:08 +0000
Subject: note 79049 deleted from function.fgetcsv by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-155069@lists.php.net to get a copy of this message
Note Submitter: ohira atto web dotto de ---- Yet another tool to parse CSV data into a associated 2d array. However, when within quotes, newline characters are treated as data instead of syntax. <?php define('LF', "\n"); // Parse a CSV data to a associated 2D array function csvToArray($data) { // output $csv = array(); $line = array(); $fieldnames = array(); $got_fieldnames = false; $escaped = false; // Flag: escape char $quoted = false; // Flag: quoted string $buffer = ''; // Buffer (quoted values) $junk = ''; // Junk buffer (unquoted values) $fieldname_index = 0; for($i = 0; $i < strlen($data); $i++) { $char = $data[$i]; if($quoted) { if(($char == '\\') && ($escaped === false)) { // Set flags $escaped = true; } elseif(($char == '"') && ($escaped === false)) { // Set flags $quoted = false; $escaped = false; } else { // Add char to buffer $buffer .= $char; // Set flags $escaped = false; } } else { if($char == LF) // Start a new line { if(strlen($buffer) > 0) { // Add buffer to line if($got_fieldnames) { $line[$fieldnames[$fieldname_index]] = $buffer; $fieldname_index++; } else { $fieldnames[] = $buffer; } // Clear buffer $buffer = ''; } else { $junk = trim($junk); // Add junk to line (possible unquoted values?) if($got_fieldnames) { $line[$fieldnames[$fieldname_index]] = $junk; $fieldname_index++; } else { $fieldnames[] = $junk; } } // Clear junk $junk = ''; // Add line to CSV if($got_fieldnames) { $csv[] = $line; } $got_fieldnames = true; // Clear line $line = array(); $fieldname_index = 0; } elseif($char == '"') // Start new value { // Set flags $quoted = true; } elseif($char == ';') { if(strlen($buffer) > 0) { // Add buffer to line if($got_fieldnames) { $line[$fieldnames[$fieldname_index]] = $buffer; $fieldname_index++; } else { $fieldnames[] = $buffer; } // Clear buffer $buffer = ''; } else { $junk = trim($junk); // Add junk to line (possible unquoted values?) if($got_fieldnames) { $line[$fieldnames[$fieldname_index]] = $junk; $fieldname_index++; } else { $fieldnames[] = $junk; } } // Clear junk $junk = ''; } else // Add to junk char { $junk .= $char; } } } return $csv; } ?>

« previous php.notes (#155069) next »