public function parseStringToArray($str)
{
$preg = '/(["])(?:(?!\1).)*?\1/';
preg_match_all($preg, $str, $pat_array);
$preg = $pat_array[0] ?? [];
if (empty($preg)) {
return explode(',', $str);
}
$return = [];
foreach ($preg as $value) {
//去除最左边英文,
if (!empty($str) && mb_substr($str, 0, 1) == ',') {
$str = mb_substr($str, 1);
}
$index = mb_strpos($str, $value);
$flag_top = mb_substr($str, 0, $index);
if (!empty($flag_top)) {
//去除最右边英文,
if (mb_substr($str, mb_strlen($flag_top) - 1, 1) == ',') {
$flag_top = mb_substr($flag_top, 0, -1);
}
$return = array_merge($return, explode(',', $flag_top));
$str = mb_substr($str, mb_strlen($flag_top));
}
$return = array_merge($return, [trim($value, '"')]);
$str = mb_substr($str, mb_strlen($value) + 1);
}
//去除最左边英文,
if (!empty($str) && mb_substr($str, 0, 1) == ',') {
$str = mb_substr($str, 1);
if (!empty($str)) {
$return = array_merge($return, explode(',', $str));
}
}
return $return;
}
public function handle()
{
$str = '"新部门,借",1,融锋86(RF)11,2,,"新部门,",888,,",ww,11"';
$this->parseStringToArray($str);
}
特殊字符串:字符串中间存在分隔符;
解析结果: