求一个正则表达式

歪着看世界 2014-07-23 04:29:32
现有一个json的string,如下面例子
$json_string = '
[
{
"code": "AF",
"value": 53,
"name": "Afghanistan"
},
{
"code": "AL",
"value": 117,
"name": "Albania"
},
{
"code": "DZ",
"value": 15,
"name": "Algeria"
},
。。。。。。。。(这里省略多个类似的表达式子)
{
"code": "AD",
"value": 181,
"name": "Andorra"
},
{
"code": "AO",
"value": 15,
"name": "Angola"
}
] ';
还有有一个数组$result_array,在一个循环中已经进行了这样赋值$result_array[$key]=$value。
现在,我想实现一个功能:首先,把$json_string中“value”后面对应的数值全部变为0;接下来,就是在一个对$result_array的循环foreach中,每次都检查$key是否与$json_string的name相符合,如果符合,则替换前面前面value对应的值为$result_array[$key];如果不符合,则不做任何事情。
比如,$result_array[‘Albania’]=246,需要检查Albania是不是在$json_string中。一查,是在该string中,则把Albania前面“value”对应的值从0改为246(0是前面初始化时所赋值的)。

求大神赐两个正则表达式,一个是全部赋值为0,一个是查询并赋值。
小的在这里感激不尽!
...全文
139 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
冷月清晖 2014-07-26
  • 打赏
  • 举报
回复
引用 3 楼 u011552243 的回复:
[quote=引用 1 楼 bubu8633 的回复:] 这个需要用正则么,array_keys 不是可以返回key名么?
不懂你的意思。最终目的是把$json_string中“value”:后面的数字改为$result_array中对应的value,如果$result_array中的$key在$json_string存在的话。 你确定array_keys就可以达到上述目的?[/quote] 1、使用array_keys($result_array)返回keys的数组,命名为key_array。 2、遍历$json_string,key_array中查找name名。 3、如果查到,改变$json_string value值。
歪着看世界 2014-07-23
  • 打赏
  • 举报
回复
xuzuning出手,谁与争锋! 版主的代码完全正确,结贴。
歪着看世界 2014-07-23
  • 打赏
  • 举报
回复
xun版主出手,还有什么话说啊,我学习学习先。回头结贴。
引用 2 楼 xuzuning 的回复:
$json_string = '
[
{
"code": "AF",
"value": 53,
"name": "Afghanistan"
},
{
"code": "AL",
"value": 117,
"name": "Albania"
},
{
"code": "DZ",
"value": 15,
"name": "Algeria"
},
{
"code": "AD",
"value": 181,
"name": "Andorra"
},
{
"code": "AO",
"value": 15,
"name": "Angola"
}
] ';
$json_string = preg_replace('/(?<="value": )\d+/', '0', $json_string);
$result_array['Albania'] = 246;
foreach($result_array as $k=>$v) {
  $json_string = preg_replace('/("value":) 0(,\s+"name": "'.$k.'")/s', "$1 {$v}$2", $json_string);
}
echo $json_string;
[ { "code": "AF", "value": 0, "name": "Afghanistan" }, { "code": "AL", "value": 246, "name": "Albania" }, { "code": "DZ", "value": 0, "name": "Algeria" }, { "code": "AD", "value": 0, "name": "Andorra" }, { "code": "AO", "value": 0, "name": "Angola" } ]
歪着看世界 2014-07-23
  • 打赏
  • 举报
回复
引用 1 楼 bubu8633 的回复:
这个需要用正则么,array_keys 不是可以返回key名么?
不懂你的意思。最终目的是把$json_string中“value”:后面的数字改为$result_array中对应的value,如果$result_array中的$key在$json_string存在的话。 你确定array_keys就可以达到上述目的?
xuzuning 2014-07-23
  • 打赏
  • 举报
回复
$json_string = '
[
{
"code": "AF",
"value": 53,
"name": "Afghanistan"
},
{
"code": "AL",
"value": 117,
"name": "Albania"
},
{
"code": "DZ",
"value": 15,
"name": "Algeria"
},
{
"code": "AD",
"value": 181,
"name": "Andorra"
},
{
"code": "AO",
"value": 15,
"name": "Angola"
}
] ';
$json_string = preg_replace('/(?<="value": )\d+/', '0', $json_string);
$result_array['Albania'] = 246;
foreach($result_array as $k=>$v) {
  $json_string = preg_replace('/("value":) 0(,\s+"name": "'.$k.'")/s', "$1 {$v}$2", $json_string);
}
echo $json_string;
[ { "code": "AF", "value": 0, "name": "Afghanistan" }, { "code": "AL", "value": 246, "name": "Albania" }, { "code": "DZ", "value": 0, "name": "Algeria" }, { "code": "AD", "value": 0, "name": "Andorra" }, { "code": "AO", "value": 0, "name": "Angola" } ]
冷月清晖 2014-07-23
  • 打赏
  • 举报
回复
这个需要用正则么,array_keys 不是可以返回key名么?

21,893

社区成员

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

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