note 79049 added to function.fgetcsv

From: Date: Thu, 08 Nov 2007 09:59:43 +0000
Subject: note 79049 added to function.fgetcsv
Groups: php.notes 
Request: Send a blank email to php-notes+get-132104@lists.php.net to get a copy of this message
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; } ?> ---- Server IP: 217.13.201.10 Probable Submitter: 84.62.131.114 ---- Manual Page -- http://www.php.net/manual/en/function.fgetcsv.php Edit -- https://master.php.net/note/edit/79049 Del: integrated -- https://master.php.net/note/delete/79049/integrated Del: useless -- https://master.php.net/note/delete/79049/useless Del: bad code -- https://master.php.net/note/delete/79049/bad+code Del: spam -- https://master.php.net/note/delete/79049/spam Del: non-english -- https://master.php.net/note/delete/79049/non-english Del: in docs -- https://master.php.net/note/delete/79049/in+docs Del: other reasons-- https://master.php.net/note/delete/79049 Reject -- https://master.php.net/note/reject/79049 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#132104) next »