note 78657 added to function.fgetcsv

From: Date: Mon, 22 Oct 2007 10:28:13 +0000
Subject: note 78657 added to function.fgetcsv
Groups: php.notes 
Request: Send a blank email to php-notes+get-131623@lists.php.net to get a copy of this message
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; } ?> ---- Server IP: 83.137.20.135 Probable Submitter: 81.69.147.41 ---- Manual Page -- http://www.php.net/manual/en/function.fgetcsv.php Edit -- https://master.php.net/note/edit/78657 Del: integrated -- https://master.php.net/note/delete/78657/integrated Del: useless -- https://master.php.net/note/delete/78657/useless Del: bad code -- https://master.php.net/note/delete/78657/bad+code Del: spam -- https://master.php.net/note/delete/78657/spam Del: non-english -- https://master.php.net/note/delete/78657/non-english Del: in docs -- https://master.php.net/note/delete/78657/in+docs Del: other reasons-- https://master.php.net/note/delete/78657 Reject -- https://master.php.net/note/reject/78657 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#131623) next »