note 98108 deleted from function.str-getcsv by danbrown

From: Date: Wed, 26 May 2010 20:35:52 +0000
Subject: note 98108 deleted from function.str-getcsv by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-169636@lists.php.net to get a copy of this message
Note Submitter: halilkoklu at gmail dot com ---- the function posted by hpartidas was an alternative for me in an environment with PHP < 5.3. However the following if clause (line 20) is wrong: <?php // ... if (empty($pos_delimiter) && empty($pos_enclosure_start)) { // ... ?> it should be <?php // ... if (($pos_delimiter === false) && ($pos_enclosure_start === false)) { // ... ?> So the corrected function is: <?php if (!function_exists('str_getcsv')) { function str_getcsv($input, $delimiter = ',', $enclosure = '"', $escape = '\\', $eol = '\n') { if (is_string($input) && !empty($input)) { $output = array(); $tmp = preg_split("/".$eol."/",$input); if (is_array($tmp) && !empty($tmp)) { while (list($line_num, $line) = each($tmp)) { if (preg_match("/".$escape.$enclosure."/",$line)) { while ($strlen = strlen($line)) { $pos_delimiter = strpos($line,$delimiter); $pos_enclosure_start = strpos($line,$enclosure); if (is_int($pos_delimiter) && is_int($pos_enclosure_start) && ($pos_enclosure_start < $pos_delimiter) ) { $enclosed_str = substr($line,1); $pos_enclosure_end = strpos($enclosed_str,$enclosure); $enclosed_str = substr($enclosed_str,0,$pos_enclosure_end); $output[$line_num][] = $enclosed_str; $offset = $pos_enclosure_end+3; } else { if (($pos_delimiter === false) && ($pos_enclosure_start === false)) { $output[$line_num][] = substr($line,0); $offset = strlen($line); } else { $output[$line_num][] = substr($line,0,$pos_delimiter); $offset = ( !empty($pos_enclosure_start) && ($pos_enclosure_start < $pos_delimiter) ) ? $pos_enclosure_start : $pos_delimiter+1; } } $line = substr($line,$offset); } } else { $line = preg_split("/".$delimiter."/",$line); /* * Validating against pesky extra line breaks creating false rows. */ if (is_array($line) && !empty($line[0])) { $output[$line_num] = $line; } } } return $output; } else { return false; } } else { return false; } } }

« previous php.notes (#169636) next »