note 82651 deleted from function.str-getcsv by cmb
| From: | cmb@php.net | Date: | Sun, 09 Feb 2020 08:24:25 +0000 |
| Subject: | note 82651 deleted from function.str-getcsv by cmb | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-214060@lists.php.net to get a copy of this message | ||
Note Submitter: peev[dot]alexander at gmail dot com
----
CSV parsing and storage is not that hard to implement - see my example functions ( I believe they do
a pretty good job - I use them in a production environment ):
<?php
if( !function_exists("parse_csv") ){
function parse_csv($string){
/* Author : Alexander Peev, posted at PHP.NET */
if( !function_exists("parse_csv_aux") ){
function parse_csv_aux( $string ){
$product = "";
$in_quote = FALSE;
$skipped_quote = FALSE;
for( $i = 0 ; $i < strlen($string) ; $i++ ){
if( $string{$i} == "\"" ){
if($in_quote){
if($skipped_quote){
$product .= "\"";
$skipped_quote = FALSE;
}
else if( !$skipped_quote ){
$skipped_quote = TRUE;
}
}
else{
if($skipped_quote) $skipped_quote = FALSE;
$in_quote = TRUE;
}
}
else if( $string{$i} == ";" ){
if($in_quote){
$product .= ";";
}
else{
$product .= " ; ";
}
}
else{
if($in_quote){
$in_quote = FALSE;
$product .= $string{$i};
}
else{
$product .= $string{$i};
}
}
}
return $product;
}
}
$data = array();
if( is_string($string) && ( stripos($string, "\n") !== FALSE ) ){
$data = explode("\n", parse_csv_aux($string) );
foreach($data as $key => $row){
$columns = array();
//$row = strtr( $row, array( "\";\"" => "\";\"",
";" => " ; " ) );
if( stripos($row, " ; ") !== FALSE ){
$columns = explode( " ; ", $row );
if( !is_array($columns) )$columns = array( strval($columns) );
$data[$key] = $columns;
}
}
return $data;
}
else if( is_string($string) && ( stripos( ($string = parse_csv_aux($string)), " ;
") !== FALSE ) ){
$columns = explode( " ; ", $string );
if( !is_array($columns) )$columns = array( strval($columns) );
return array($columns);
}
else return strval($string);
} /* end function parse_csv */
} /* end not function exists parse_csv */
if( !function_exists("store_csv") ){
function store_csv($data){
/* Author : Alexander Peev, posted at PHP.NET */
if( !function_exists("store_csv_aux") ){
function store_csv_aux( $string ){
$string = strtr( $string, array( "\n" => "" ) );
$product = "";
$in_quote = FALSE;
for( $i = 0 ; $i < strlen($string) ; $i++ ){
if( $string{$i} == "\"" ){
if($in_quote){
$product .= "\"\"";
}
else{
$product .= "\"\"\"";
$in_quote = TRUE;
}
}
else if( $string{$i} == ";" ){
if($in_quote){
$product .= ";";
}
else{
$product .= "\";";
$in_quote = TRUE;
}
}
else{
if($in_quote){
$product .= "\"";
$in_quote = FALSE;
$product .= $string{$i};
}
else{
$product .= $string{$i};
}
}
}
if($in_quote)$product .= "\"";
return $product;
}
}
if(!is_array($data))return strval($data);
$passed_rows = FALSE;
$product = "";
foreach($data as $row){
if( $passed_rows )$product .= "\n";
if( is_array($row) ){
$columns = "";
$passed_cols = FALSE;
foreach($row as $column){
if( $passed_cols )$columns .= ";";
$columns .= store_csv_aux( $column );
$passed_cols =TRUE;
}
$product .= strval($columns);
}
else{
$product .= strtr( strval($row), array("\n" => "") );
}
$passed_rows = TRUE;
}
return $product;
} /* end function store_csv */
} /* end not function exists store_csv */
?>