CSV Parser / Writer for PHP
Example A:
//cell separator, row separator, value enclosure $csv = new CSV(';', "\r\n", '"'); //parse the string content $csv->setContent(file_get_contents('data.csv')); //returns an array with the CSV data print_r($csv->getArray());
Exemple B:
$csv = new CSV(';', "\r\n", '"'); //sets up the content through an array $csv->setArray( array( array('col"una1', "colu\r\nna2"), array('col;una3', 'coluna4') ) ); //retorns string with the CSV representation print $csv->getContent();
<?php //+ Jonas Raoni Soares Silva //@ http://jsfromhell.com class CSV{ var $cellDelimiter; var $valueEnclosure; var $rowDelimiter; function CSV($cellDelimiter, $rowDelimiter, $valueEnclosure){ $this->cellDelimiter = $cellDelimiter; $this->valueEnclosure = $valueEnclosure; $this->rowDelimiter = $rowDelimiter; $this->o = array(); } function getArray(){ return $this->o; } function setArray($o){ $this->o = $o; } function getContent(){ if(!(($bl = strlen($b = $this->rowDelimiter)) && ($dl = strlen($d = $this->cellDelimiter)) && ($ql = strlen($q = $this->valueEnclosure)))) return ''; for($o = $this->o, $i = -1; ++$i < count($o);){ for($e = 0, $j = -1; ++$j < count($o[$i]);) (($e = strpos($o[$i][$j], $q) !== false) || strpos($o[$i][$j], $b) !== false || strpos($o[$i][$j], $d) !== false) && $o[$i][$j] = $q . ($e ? str_replace($q, $q . $q, $o[$i][$j]) : $o[$i][$j]) . $q; $o[$i] = implode($d, $o[$i]); } return implode($b, $o); } function setContent($s){ $this->o = array(); if(!strlen($s)) return true; if(!(($bl = strlen($b = $this->rowDelimiter)) && ($dl = strlen($d = $this->cellDelimiter)) && ($ql = strlen($q = $this->valueEnclosure)))) return false; for($o = array(array('')), $this->o = &$o, $e = $r = $c = 0, $i = -1, $l = strlen($s); ++$i < $l;){ if(!$e && substr($s, $i, $bl) == $b){ $o[++$r][$c = 0] = ''; $i += $bl - 1; } elseif(substr($s, $i, $ql) == $q){ $e ? (substr($s, $i + $ql, $ql) == $q ? $o[$r][$c] .= substr($s, $i += $ql, $ql) : $e = 0) : (strlen($o[$r][$c]) == 0 ? $e = 1 : $o[$r][$c] .= substr($s, $i, $ql)); $i += $ql - 1; } elseif(!$e && substr($s, $i, $dl) == $d){ $o[$r][++$c] = ''; $i += $dl - 1; } else $o[$r][$c] .= $s[$i]; } return true; } } ?>