List Info

Thread: note 78657 added to function.fgetcsv




note 78657 added to function.fgetcsv
user name
2007-10-22 05:28:13
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


[1]

about | contact  Other archives ( Real Estate discussion Medical topics )