保留闭合字符完整性的分割字符串方法
问题描述:在处理一批csv数据文件时,发现string字段由双引号闭合,每个字段间用逗号区分。使用了explode进行分割为数组后,发现其中地址字段包含逗号,也意味着地址字段会被切割为两段,于是我有了第一套方案:使用双引号分割。但是发现日期、数值、金额类型的字段均没有闭合字符,因此无法准确分割。于是造了车子。
/**
* 保留闭合字符中完整性的分割字符串方法
* @param string|array $delimiter 分隔符,多个分隔符用数组传入
* @param string|array $surround 闭合字符,多个字符用数组传入
* @param string $input 输入字符串
* @return array|boolean 返回结果
*/
function splitBySurround($delimiter, $surround = '', $input)
{
if (empty($delimiter) || empty($input)) {
return false;
}
if (is_string($delimiter)) {
$delimiter = array($delimiter);
}
if (!empty($delimiter) && is_string($surround)) {
$surround = array($surround);
}
$length = strlen($input);
$resultArray = array();
$tempStr = '';
for ($i = 0; $i < $length; $i++) {
$character = $input[$i];
if (in_array($character, $delimiter)) {
if (isset($tempStr[0]) && !empty($surround) && in_array($tempStr[0], $surround) && !in_array($tempStr[strlen($tempStr) -1], $surround)) {
$tempStr .= $character;
} else {
$resultArray[] = $tempStr;
$tempStr = '';
}
} else {
$tempStr .= $character;
}
}
return $resultArray;
}
转载需经作者允许并注明出处(http://blog.hiunique.com/php/231.html)
来自:你好创造者