如何解析类似map格式的字符串?

cc2005726 2012-10-24 08:19:18
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
)

)

)
要怎么做呢?
...全文
376 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
一起混吧 2012-10-29
  • 打赏
  • 举报
回复
在那段代码前面加上: error_reporting(E_ALL & ~E_NOTICE);
cc2005726 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

直接我那样写就可以了。何必多此一举。后面那句不会执行。
[/Quote]
刚开始想到要这么写,是因为
用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时会报这样的信息)
一起混吧 2012-10-29
  • 打赏
  • 举报
回复
直接我那样写就可以了。何必多此一举。后面那句不会执行。
cc2005726 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

$arr[]=$a; //就是这一行导致在打印$arr时出现了[0] => col1,col2
--有什么不对吗

preg_replace 里面为$a 赋值不知道要干什么,明显影响了后面的执行。
[/Quote]
$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没有用对?
一起混吧 2012-10-29
  • 打赏
  • 举报
回复
$arr[]=$a; //就是这一行导致在打印$arr时出现了[0] => col1,col2
--有什么不对吗

preg_replace 里面为$a 赋值不知道要干什么,明显影响了后面的执行。
cc2005726 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

贴出你的代码看看
[/Quote]
我刚发现第二个问题是咋 回事了
$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);
cc2005726 2012-10-29
  • 打赏
  • 举报
回复
对于第一个问题:
我曾试过这样做:
preg_replace('/\[table\](\w+)=\[([^]]+)\]/e','$a=strval("$2");$arr["table"]["$1"]=explode(",","$a");',$str);
print_r($arr);
可是发现replace里面好像不能写以分号分隔的多个php语句,因为像这样写的时候,报了错
PHP Notice: Undefined variable: arr
一起混吧 2012-10-29
  • 打赏
  • 举报
回复
贴出你的代码看看
cc2005726 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

PHP code
$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);
[/Quote]
这种方法我试了下,有两个问题:
1. 报这种提示PHP Notice: Array to string conversion in /home/ninglan.cc/test/test/test2.php
2. $arr打印时,出现一行[0] => col1,col2
这两个问题要如何解决呢?
cc2005726 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你的第一个数组只有一个[table]吗?,
[/Quote]
是的,这么做是为了以后扩展
一起混吧 2012-10-24
  • 打赏
  • 举报
回复
$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);
peislove 2012-10-24
  • 打赏
  • 举报
回复
你的第一个数组只有一个[table]吗?,

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧