str="{[table]table_name1=[col1, col2],[table]table_name2=[col1,col2]}";//[]中的table字符串是不变的
现在需要上述字符串解析成如下格式:
$a=array('table'=>array(
                'table_name1'=>array('col1','col2'),
                'table_name2'=>array('col1','col2'),
)
);也就是说
Array
(
    [table] => Array
        (
            [table_name1] => Array
                (
                    [0] => col1
                    [1] => col2
                )            [table_name2] => Array
                (
                    [0] => col1
                    [1] => col2
                )        ))
要怎么做呢?

解决方案 »

  1.   

    你的第一个数组只有一个[table]吗?,
      

  2.   

    $str="{[table]table_name1=[col1,col2],[table]table_name2=[col1,col2]}";
    preg_replace('/(table_name\d+)=\[([^]]+)\]/e','$arr["table"]["$1"]=explode(",","$2")',$str);
    print_r($arr);
      

  3.   

    这种方法我试了下,有两个问题:
    1. 报这种提示PHP Notice:  Array to string conversion in /home/ninglan.cc/test/test/test2.php
    2. $arr打印时,出现一行[0] => col1,col2
    这两个问题要如何解决呢?
      

  4.   

    对于第一个问题:
    我曾试过这样做:
    preg_replace('/\[table\](\w+)=\[([^]]+)\]/e','$a=strval("$2");$arr["table"]["$1"]=explode(",","$a");',$str);
    print_r($arr);
    可是发现replace里面好像不能写以分号分隔的多个php语句,因为像这样写的时候,报了错
    PHP Notice:  Undefined variable: arr 
      

  5.   

    我刚发现第二个问题是咋 回事了
    $a=strval("col1,col2");
    var_dump($a);
    $arr[]=$a;    //就是这一行导致在打印$arr时出现了[0] => col1,col2
    $str="{[table]table_name1=[col1,col2],[table]table_name2=[col1,col2]}";
    preg_replace('/\[table\](\w+)=\[([^]]+)\]/e','$a=strval("$2");$arr["table"]["$1"]=explode(",","$a");',$str);
    print_r($arr);
      

  6.   

    $arr[]=$a; //就是这一行导致在打印$arr时出现了[0] => col1,col2
    --有什么不对吗preg_replace 里面为$a 赋值不知道要干什么,明显影响了后面的执行。
      

  7.   

    $arr[]=$a;
    这句在$arr["table"]["$1"]=explode(",","$a")之前,相当于已经为$arr赋了一个key-value
    所以在打印时会出现[0] => col1,col2另外,
    preg_replace 里面为$a 赋值不知道要干什么,明显影响了后面的执行。
    -----这句中先把匹配到的字段转成str类型并给$a 赋值,然后把$a 打散为数组
    但是用
    preg_replace('/\[table\](\w+)=\[([^]]+)\]/e','$a=strval("$2");$arr["table"]["$1"]=explode(",","$a");',$str);
    这句,replace里的第二个分号压根没有执行,不知道为什么?我把replacement 换成
    preg_replace('/\[table\](\w+)=\[([^]]+)\]/e','$a=strval("$2");echo 1111',$str);
    执行时,也发现没有打印1111出来
    是不是我的preg_replace没有用对?
      

  8.   

    刚开始想到要这么写,是因为
    用preg_replace('/(table_name\d+)=\[([^]]+)\]/e','$arr["table"]["$1"]=explode(",","$2")',$str);
    报这种提示PHP Notice: Array to string conversion in /home/ninglan.cc/test/test/test2.php
    原因就是,$s出来的是col1,col2(这并非str,所以在explode时会报这样的信息)
      

  9.   

    在那段代码前面加上: error_reporting(E_ALL & ~E_NOTICE);