note 125719 added to function.str-getcsv
| From: | txxllm at hotmail dot com | Date: | Mon, 25 Jan 2021 06:05:16 +0000 |
| Subject: | note 125719 added to function.str-getcsv | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-216226@lists.php.net to get a copy of this message | ||
Sometimes the enclosure parameter of the str_getcsv function doesn't work, so I wrote a
function that is equivalent to the function
<?php
/**
* @param string $input
* @param string $delimiter
* @param string $enclosure
* @param string $escape
* @return array
* @author TXX
* @date 2021/1/25 15:03
*/
function my_str_getcsv($input, $delimiter = ',', $enclosure = '"',
$escape = '\\') {
$output = array();
if (empty($input) || !is_string($input)) {
return $output;
}
if (preg_match("/". $escape . $enclosure ."/", $input)) {
while ($strlen = strlen($input)) {
$pos_delimiter = strpos($input, $delimiter);
//åé符åºç°ä½ç½®
$pos_enclosure_start = strpos($input, $enclosure);
//å°é符-å¼å§åºç°ä½ç½®
//æå°é符并å°é符å¨åé符ä¹å
if (is_int($pos_delimiter) && is_int($pos_enclosure_start) &&
$pos_enclosure_start < $pos_delimiter) {
$pos_enclosure_start += 1;
$enclosed_str = substr($input, $pos_enclosure_start);
//å°éå符串-å¼å§
$pos_enclosure_end = strpos($enclosed_str, $enclosure);
//å°é符-ç»å°¾å°éå符串-å¼å§ä¸åºç°ä½ç½®
$pos_enclosure_end += $pos_enclosure_start;
//å°é符-ç»å°¾å¨åå§æ°æ®ä¸åºç°ä½ç½®
if ($pos_enclosure_end < $pos_delimiter) {
//å°é符-ç»æå¨åé符ä¹å,æ éè¿è¡å°é
$output[] = substr($input, 0, $pos_delimiter);
$offset = $pos_delimiter + 1;
} else {
//å°é符-ç»æå¨åé符ä¹å,éè¦å°é
$pos_enclosure_end += 1;
$before_enclosed_str = substr($input, 0, $pos_enclosure_end);
$enclosed_str = substr($input, $pos_enclosure_end);
//å°éå符串ä¹åçå符串
$enclosed_arr = my_str_getcsv($enclosed_str, $delimiter, $enclosure);
//å°å°éä¹åçå符串æ§è¡èªèº«
$enclosed_arr[0] = $before_enclosed_str . $enclosed_arr[0];
$output = array_merge($output, $enclosed_arr);
$offset = strlen($input); //å
æ ç§»è³ç»å°¾
}
} else {
//æ å°é
if (!is_int($pos_delimiter)) {
//æ åé符,ç´æ¥å°å符串å å
¥è¾åºæ°ç»
$output[] = $input;
//å
æ ç§»è³ç»å°¾
$offset = strlen($input);
} else if ($input == $delimiter) {
//妿å符串åªå©ä¸åé符,éä¿å'',''
$output = array_merge($output, ['','']);
$offset = $pos_delimiter+1;
//å
æ ç§»è³åé符åä¸ä½
} else {
$output[] = substr($input, 0, $pos_delimiter);
//å°åå²ç¬¦ä¹åçæ°æ®
$offset = $pos_delimiter+1;
//å
æ ç§»è³åé符åä¸ä½
}
}
//å°åç¬¦ä¸²æ´æ°è³å
æ ä½ç½®
$input = substr($input,$offset);
}
} else {
//å符串ä¸ä¸åå¨å°é符,ç´æ¥éè¿åé符åå²
$input = preg_split("/". $escape . $delimiter ."/", $input);
if (is_array($input)) {
$output = $input;
}
}
return $output;
}
?>
----
Server IP: 45.112.84.4
Probable Submitter: 45.91.159.166 (proxied: 119.122.115.58)
----
Manual Page -- http://php.net/manual/en/function.str-getcsv.php
Edit -- https://master.php.net/note/edit/125719
Del: integrated -- https://master.php.net/note/delete/125719/integrated
Del: useless -- https://master.php.net/note/delete/125719/useless
Del: bad code -- https://master.php.net/note/delete/125719/bad+code
Del: spam -- https://master.php.net/note/delete/125719/spam
Del: non-english -- https://master.php.net/note/delete/125719/non-english
Del: in docs -- https://master.php.net/note/delete/125719/in+docs
Del: other reasons-- https://master.php.net/note/delete/125719
Reject -- https://master.php.net/note/reject/125719
Search -- https://master.php.net/manage/user-notes.php