有没有这样的函数把 a,100,b,32,c,10变成 array( 'a'=>100,
 'b'=>32,
 'c'=>10
)有没得直接的函数
否则我只能str_split 然后循环变了 o(╯□╰)o

解决方案 »

  1.   


    $str = 'a,100,b,32,c,10,d,20';
    $res_str = implode(',',array_map(create_function('$v', 'return implode("=>",$v);'), array_chunk(explode(',', $str), 2)));
    $res =  eval("return array($res_str);");echo '<pre>';
    print_r($res);
    echo '</pre>';
    /*
    Array
    (
        [a] => 100
        [b] => 32
        [c] => 10
        [d] => 20
    )
    */
      

  2.   

    高。我没想到用这种方法。要我就重新new个array往里面扔数据
      

  3.   

    直接的函数没有,恶心的代码有很多...
    $Str = 'a,100,b,32,c,10';
    preg_match_all('/[a-z]+/i', $Str, $Aarray);
    $Aarray = $Aarray[0];
    preg_match_all('/[0-9]+/', $Str, $Barray);
    $Barray = $Barray[0];
    $Carray = array_combine($Aarray, $Barray);
    print_r($Carray);
      

  4.   

    11文 你又来鸟 我只想到 explode$str = 'a,100,b,32,c,10';
    $arr = explode(',',$str);
    for($i = 0 ; $i <count($arr); $i++)
    {
    if($i %2 ==0)
    $new_arr[$arr[$i]] =  $arr[$i+1];
    }
      

  5.   

    来一个另类的
    $s = 'a,100,b,32,c,10';preg_replace('/(\w+),([^,]+)/se', '$ar[$1]=$2', $s);
    print_r($ar);
    Array
    (
        [a] => 100
        [b] => 32
        [c] => 10
    )
      

  6.   

    好吧,我来换汤不换药
    $Str = 'a,100,b,32,c,10';
    preg_match_all('/([a-z]+),([0-9]+)/i', $Str, $Aarray);
    $Carray = array_combine($Aarray[1], $Aarray[2]);var_dump($Carray);
      

  7.   


    $str = "a,100,b,32,c,10";
    eval("\$res=array(".preg_replace("/([^,]+),([^,]+)/", "'\\1'=>'\\2'", $str).");");
    print_r($res);
    /*
    Array
    (
        [a] => 100
        [b] => 32
        [c] => 10
    )
    */
      

  8.   

    s
    如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。e
    如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,
    ? 在 . + 和 * 之后 表示非贪婪匹配: *、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。