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 -- htt
p://www.php.net/manual/en/function.fgetcsv.php
Edit -- https://master
.php.net/note/edit/78657
Del: integrated -- h
ttps://master.php.net/note/delete/78657/integrated
Del: useless -- http
s://master.php.net/note/delete/78657/useless
Del: bad code -- htt
ps://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 -- http
s://master.php.net/note/delete/78657/in+docs
Del: other reasons-- https://mast
er.php.net/note/delete/78657
Reject -- https://mast
er.php.net/note/reject/78657
Search -- https://
master.php.net/manage/user-notes.php
--
PHP Notes Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub
.php
|