$var = "a=1,b=2,c='da,=cheng'";
1、把上面的字符串,切分成$var = array('a=1','b=2','c=da,=cheng')
2、最终目标是 $var = array('a'=>1,'b'=>2,'c'=>'da,=cheng')
如果有了1,弄出个2的方法,我的作法是用字符串分割函数,切割到第一个“=”刚才求得的正则
$arr=preg_split('/,(?=\w)/',$var,-1,PREG_SPLIT_NO_EMPTY);
print_r($arr);exit;
foreach($arr as $v){
    $t=explode('=',$v,2);
    $ar[$t[0]]=$t[1];
}
print_r($ar);
应付我这个变量是可以的,但是稍微修改就不行了。
变量改成 $var = "a=1,b=2,c='da,asd大成'", 结果就不对了!

解决方案 »

  1.   

    $arr=preg_split('/,(?=\w+\=)/',$var,-1,PREG_SPLIT_NO_EMPTY);
      

  2.   


    $var = "a='ab,c=ac',b=2,d=3,c='da,asd大成'";
    再改一下,又不行了,很难搞出一个根据","分割,但是前提是","不在=后面的引号内
      

  3.   


    $var = "a='ab,c\'=ac',b='',d=3,c='da,asd大成'";
    echo $var,'<br>';
    $txt = preg_replace('/("|\')([^,]*)(,)([^,]*)\\1/', "\\1\\2=-=-=comma=-=-=\\4\\1", $var);
    echo $txt,'<br>';
    $arr = explode(',', $txt);
    foreach($arr as $v){
        $t=explode('=',$v,2);
        $ar[$t[0]]=str_replace('=-=-=comma=-=-=', ',', $t[1]);
    }
    print_r($ar);我的兼容性好!
      

  4.   

    郁闷,我的修改下还是不行,$var = "a='ab,c\'=ac',b='',d=3,c='da,as,d大成'";
    就不对了,继续等待高手的答案 !