最笨的办法,请大家指教.
$a = explode(",\"", $str);
$a[1] ="\"".$a[1];
$a[2] ="\"".$a[2];
$b = explode("\",", $a[3]);
unset($a[3]);
$b[0] = "\"".$b[0]."\"";
$c=array_merge($a,$b);
print_r($c);
$a = explode(",\"", $str);
$a[1] ="\"".$a[1];
$a[2] ="\"".$a[2];
$b = explode("\",", $a[3]);
unset($a[3]);
$b[0] = "\"".$b[0]."\"";
$c=array_merge($a,$b);
print_r($c);
$s = "SiteInfo.TableID,\"i.Count DESC,c.ContentEditDate DESC\",\"i.ID,i.SiteID,i.Count,c.Title,c.ContentEditDate\",\"10\",SiteInfo.SiteID";
$p = '/[,"]?([^"]+)[,"]?/i';
preg_match_all($p,$s,$a);
echo "<pre>";
print_r(array_filter($a[1],create_function('$a', 'if ($a != ",") return $a;')));
echo "</pre>";
?>
Array
(
[0] => SiteInfo.TableID,
[1] => i.Count DESC,c.ContentEditDate DESC
[3] => i.ID,i.SiteID,i.Count,c.Title,c.ContentEditDate
[5] => 10
[6] => SiteInfo.SiteID
)还没有想到好的方法……
$b[1]="\"".$b[1]."\"";
$b[2].="\"";
$b[3].="\"";
print_r ($b);
$str = 'SiteInfo.TableID,"i.Count DESC,c.ContentEditDate DESC","i.ID,i.SiteID,i.Count,c.Title,c.ContentEditDate","10",SiteInfo.SiteID';
$re = preg_split("/,\"|\",/",$str);
print_r ($re);
?>
要达到的效果是,字符串和变量分割开来,变量需再次替换。
TO:iasky(C#_ASP_PHP) 你的方法基本是可以达到,只少了原来的“"”号。我自已写了个方法可以,感觉笨了点。
function split_tag($tag_msg='')
{
$t = 0;
$tt = 0;
$return_tag = null;
$return_tag_msg = "";
if($tag_msg == '')
{
return $return_tag_msg;
}else{
$tag_array = explode(",", $tag_msg);
foreach ($tag_array as $tkey => $tvar)
{
if (substr($tvar, 0, 1) == '"' && substr($tvar, -1) != '"')
{
$return_tag[$t] = $tvar;
$tt=1;
continue;
}
if (substr($tvar, -1) == '"' && substr($tvar, 0, 1) != '"' )
{
$return_tag[$t] .= ",".$tvar;
$t++;
$tt=0;
continue;
}
if (substr($tvar, 0, 1) == '"' && substr($tvar, -1) == '"')
{
$return_tag[$t] = $tvar;
$t++;
continue;
}
if (substr($tvar, 0, 1) != '"' && substr($tvar, -1) != '"')
{
if($tt == 1)
{
$return_tag[$t] .= ",".$tvar;
continue;
}else{
$return_tag[$t] = $tvar;
$t++;
continue;
}
}
}
$return_tag_msg = implode(",", $return_tag);
return $return_tag_msg;
}
}
{
$t = 0;
$tt = 0;
$return_tag = null;
$return_tag_msg = "";
if($tag_msg == '')
{
return $return_tag_msg;
}else{
$tag_array = explode(",", $tag_msg);
foreach ($tag_array as $tkey => $tvar)
{
if (substr($tvar, 0, 1) == '"' && substr($tvar, -1) != '"')
{
$return_tag[$t] = $tvar;
$tt=1;
continue;
}
if (substr($tvar, -1) == '"' && substr($tvar, 0, 1) != '"' )
{
$return_tag[$t] .= ",".$tvar;
$t++;
$tt=0;
continue;
}
if (substr($tvar, 0, 1) == '"' && substr($tvar, -1) == '"')
{
$return_tag[$t] = $tvar;
$t++;
continue;
}
if (substr($tvar, 0, 1) != '"' && substr($tvar, -1) != '"')
{
if($tt == 1)
{
$return_tag[$t] .= ",".$tvar;
continue;
}else{
list($block1, $skalar1) = $this->var_name($tvar); 此处为另外的转换函数,变量才转换(引号括起来的视为字符串)
$return_tag[$t] = "\$$block1"."['$skalar1']";
$t++;
continue;
}
}
}
$return_tag_msg = implode(",", $return_tag);
return $return_tag_msg;
}
}
http://us3.php.net/manual/en/function.fgetcsv.php
个人比较好的:用正则表达式
<?function csv_string_to_array($str){
$expr="/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/";
$results=preg_split($expr,trim($str));
return preg_replace("/^\"(.*)\"$/","$1",$results);
}
$str=<<<EOF
"testing, stuff, here","is testing ok",200,456
EOF;
print_r(csv_string_to_array($str));
?>
三行代码就搞定。非常感谢!结贴了!