小弟我刚开始 写 PHP 能力有限,也许思路也不行,不知道各位有什么好的方法帮我解决一下这个问题,在些万分感谢 !*8|1,"red",2 *9|4,"blue",5   这样一个字符串,我想转成 array([8]=>array(1,"red",2),[9]=>array(4,"blue",5))这样的二维数组。哪个帅哥或者 姐姐帮忙下谢谢

解决方案 »

  1.   

    $str = '';
    $arr = explode('|', $str);
    $ar = array();
    foreach($arr as $val){
    $ar[] = explode(',', $val);
    }
    差不多就这个思路
      

  2.   

    <?php$str = '*8|1,"red",2 *9|4,"blue"';
    $arr = explode('|', $str);
    $ar = array();$len = count($arr);
    for($i = 0; $i < $len; $i++) {
    $key = trim($arr[$i], '*');
    $val = explode(',', $arr[++$i]);
    $ar[$key] = $val;
    }
      

  3.   

    $s = '*8|1,"red",2 *9|4,"blue",5';
    $arr1 = explode('*', $s);
    $arr2 = array();
    foreach($arr1 as $val){
    if($val){
    $arr = explode('|', $val);
    $arr3 = explode(',', $arr[1]);
    foreach($arr3 as $key => $v2){
    $arr2[$arr[0]][] = $v2;
    }
    }
    }
    print_r($arr2);
      

  4.   

    楼上的写得对,太感谢了,我还得加工成二维数据里要用固定的KEY 来查询,$v['ecount'] 这样来查的嘿
      

  5.   

    $s = '*8|1,"red",2 *9|4,"blue",5';preg_match_all("/ ?\*(\d+)\|([^*]+)/", $s, $r);$ar = array();
    foreach($r[1] as $k=>$v) {
      $ar[$v] = array_map('foo', split(',', $r[2][$k]));
    }function foo($s) {
      return trim($s, '"');
    }print_r($ar);Array
    (
        [8] => Array
            (
                [0] => 1
                [1] => red
                [2] => 2 
            )    [9] => Array
            (
                [0] => 4
                [1] => blue
                [2] => 5
            )
      

  6.   


    $str = '*8|1,"red",2 *9|4,"blue",5';
    $str = preg_replace('#\*(\d+)\|#', '),$1=>array(', $str);
    $str = substr($str, 2) . ')';
    eval("\$arr = array({$str});");
    print_r($arr);
    /*Array
    (
        [8] => Array
            (
                [0] => 1
                [1] => red
                [2] => 2
            )
     
        [9] => Array
            (
                [0] => 4
                [1] => blue
                [2] => 5
            )
     
    )
    */
      

  7.   

    不需要循环的做法,我觉得还可以优化,谁来试试$s = '*8|1,"red",2 *9|4,"blue",5';
    $s=preg_replace("/([^\|\*]+)\|/iuU", "$1=>array(", $s);
    $s=str_replace(" *",'),',$s);
    $s=trim($s," *");
    $s='$a=array('.$s.'));';
    //echo $s;
    eval($s);
    var_dump($a);
      

  8.   


    $str = '*8|1,"red",2 *9|4,"bl *ue",5';
    $r   = array();
    preg_replace('#\*([^\|]+)\|((?:(?!\s\*[^\|]+\|[^,]+).)*)#se','$r[\1] = explode(",","\2")',$str);
    echo "<pre/>";
    print_r($r);