最笨的办法,请大家指教.
$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);

解决方案 »

  1.   

    <?php
    $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
    )还没有想到好的方法……
      

  2.   

    $b =preg_split("/,\"|\",/",$a);
    $b[1]="\"".$b[1]."\"";
    $b[2].="\"";
    $b[3].="\"";
    print_r ($b);
      

  3.   

    <?
    $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);
    ?>
      

  4.   

    我在改写模板系统里面的一个函数调用的问题。
    要达到的效果是,字符串和变量分割开来,变量需再次替换。
    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;
    }
    }
      

  5.   

    晕,格式这样了,重发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{
    list($block1, $skalar1) = $this->var_name($tvar);  此处为另外的转换函数,变量才转换(引号括起来的视为字符串)
    $return_tag[$t] = "\$$block1"."['$skalar1']";
    $t++;
    continue; 
    }
    }
    }
    $return_tag_msg = implode(",", $return_tag);
    return $return_tag_msg;
    }
    }
      

  6.   

    这就是CSV格式的字符串,都没有人往这方面想的,PHP.net提供很多解决方案:
    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));
    ?>
      

  7.   

    学习楼上的了,原来是csv格式
      

  8.   

    高手!TO:Meteorlet(www.dictworld.com)
    三行代码就搞定。非常感谢!结贴了!