Unique

保留闭合字符完整性的分割字符串方法

  问题描述:在处理一批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://nit.hiunique.com/php/231.html)
来自:Unique

添加评论