note 78657 added to function.fgetcsv
| From: | me dot wieringa at home dot nl | 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