请选择 进入手机版 | 继续访问电脑版

QQ登录

只需一步,快速开始

扫一扫,访问微社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 213|回复: 7

[PHP开发] 正则表达式匹配问题

[复制链接]

2

主题

6

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2018-9-16 20:23:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
下面代码始终不执行If后面的语句

$roomzx = $db->getOne("SELECT user FROM jz_room WHERE endtime= '0' AND user != 'null' ");
$roomidd = $db->getOne("SELECT id FROM jz_user ");    //这里已经读取到user字段里面的值为  {"87":1,"174":1,"136":1}
file_put_contents('log.txt',$roomzx,FILE_APPEND);            //这里已经读取到id字段里面的值为  87

file_put_contents('log.txt',$roomidd,FILE_APPEND);
if(preg_match ($roomidd,$roomzx)) {

    return tip("您已登录", $connection);  
}



$roomzx和$roomidd里面都有87 ,为什么匹配不了呢?请高手指点!
数据库如下


微信截图_20180916122952.png

273

主题

295

帖子

1219

积分

中级会员

Rank: 3Rank: 3

积分
1219
发表于 2018-9-17 23:57:06 | 显示全部楼层
我觉得你可以改变一下思路,把roomidd的值转换成数组,然后在数组中查找键值等于roomzx的值。

2

主题

6

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2018-9-18 02:06:42 | 显示全部楼层
学渣 发表于 2018-9-17 23:57
我觉得你可以改变一下思路,把roomidd的值转换成数组,然后在数组中查找键值等于roomzx的值。 ...

您说得很对,我试了下,把 {"87":1,"174":1,"136":1} 前后加上引号'{"87":1,"174":1,"136":1}' 这样就能匹配 ,但我不知道怎么转换,请指点,谢谢!

$roomidd= '{"87":1,"174":1,"82":1}'; //这样就能匹配
$roomidd= {"87":1,"174":1,"82":1};   //这样就不能匹配

273

主题

295

帖子

1219

积分

中级会员

Rank: 3Rank: 3

积分
1219
发表于 2018-9-18 10:32:25 | 显示全部楼层
swsw222 发表于 2018-9-18 02:06
您说得很对,我试了下,把 {"87":1,"174":1,"136":1} 前后加上引号'{"87":1,"174":1,"136":1}' 这样就能匹 ...

preg_match()函数的第一个参数应该是个字符串,你把$roomidd的值转成字符串应该就可以了,但是我还是建议不要使用正则匹配,现代PHP开发中,尽量减少使用正则,影响性能

2

主题

6

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2018-9-18 13:52:56 | 显示全部楼层
学渣 发表于 2018-9-18 10:32
preg_match()函数的第一个参数应该是个字符串,你把$roomidd的值转成字符串应该就可以了,但是我还是建议 ...

$roomzx = $db->getOne("SELECT user FROM jz_room WHERE endtime= '0' AND user != 'null' AND user != '[]' ");//这个值是   {"87":1,"174":1,"82":1}
$roomidd = $db->getOne("SELECT id FROM jz_user ");//这个值是    87
if(preg_match ("/$roomidd /",$roomzx )) {
           return tip("你已登录", $connection);
}

其实这个判断比较简单,如果$roomzx 是单一的数字就好办了,if ($roomzx =$roomzx )就可以了,可偏偏是一串。
好像用数据库查询语句LIKE可以,但不会写,有其它更好的方法吗?


273

主题

295

帖子

1219

积分

中级会员

Rank: 3Rank: 3

积分
1219
发表于 2018-9-19 09:58:49 | 显示全部楼层
swsw222 发表于 2018-9-18 13:52
$roomzx = $db->getOne("SELECT user FROM jz_room WHERE endtime= '0' AND user != 'null' AND user != ' ...

上面我不是说过把json字符串转成数组吗?

2

主题

6

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2018-9-19 09:59:13 | 显示全部楼层
已解决,加了个$roomzx = json_encode($roomInfo['user'],true);就搞定

2

主题

6

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2018-9-19 10:16:07 | 显示全部楼层
学渣 发表于 2018-9-19 09:58
上面我不是说过把json字符串转成数组吗?

是的,转成数组就解决了,谢谢
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

     
    战略合作|联系方式|广告赞助|商务合作|手机版|小黑屋|( 京ICP备14036609号-6 )

GMT+8, 2018-10-21 00:55

© 2013-2017 Powered by Discuz! X3.3. 本站由 又拍云 提供 CDN 图片存储服务

快速回复 返回顶部 返回列表