note 78657 deleted from function.fgetcsv by felipe

From: Date: Sun, 09 Dec 2007 15:51:07 +0000
Subject: note 78657 deleted from function.fgetcsv by felipe
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-133037@lists.php.net to get a copy of this message
Note Submitter: me dot wieringa at home dot nl ---- Yet another tool to parse CSV data into a 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 2D array function csvToArray($data) { // output $csv = array(); $line = array(); $escaped = false; // Flag: escape char $quoted = false; // Flag: quoted string $buffer = ''; // Buffer (quoted values) $junk = ''; // Junk buffer (unquoted values) 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 $line[] = $buffer; // Clear buffer $buffer = ''; } else { $junk = trim($junk); // Add junk to line (possible unquoted values?) $line[] = $junk; } // Clear junk $junk = ''; // Add line to CSV $csv[] = $line; // Clear line $line = array(); } elseif($char == '"') // Start new value { // Set flags $quoted = true; } elseif($char == ',') { if(strlen($buffer) > 0) { // Add buffer to line $line[] = $buffer; // Clear buffer $buffer = ''; } else { $junk = trim($junk); // Add junk to line (possible unquoted values?) $line[] = $junk; } // Clear junk $junk = ''; } else // Add to junk char { $junk .= $char; } } } // Clean up if(strlen($buffer) > 0) { // Add buffer to line $line[] = $buffer; // Clear buffer $buffer = ''; } else { $junk = trim($junk); // Add junk to line (possible unquoted values?) $line[] = $junk; } $csv[] = $line; return $csv; } ?>

« previous php.notes (#133037) next »