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
) ))
要怎么做呢?
现在需要上述字符串解析成如下格式:
$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
) ))
要怎么做呢?
preg_replace('/(table_name\d+)=\[([^]]+)\]/e','$arr["table"]["$1"]=explode(",","$2")',$str);
print_r($arr);
1. 报这种提示PHP Notice: Array to string conversion in /home/ninglan.cc/test/test/test2.php
2. $arr打印时,出现一行[0] => col1,col2
这两个问题要如何解决呢?
我曾试过这样做:
preg_replace('/\[table\](\w+)=\[([^]]+)\]/e','$a=strval("$2");$arr["table"]["$1"]=explode(",","$a");',$str);
print_r($arr);
可是发现replace里面好像不能写以分号分隔的多个php语句,因为像这样写的时候,报了错
PHP Notice: Undefined variable: arr
$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);
--有什么不对吗preg_replace 里面为$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没有用对?
用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时会报这样的信息)