正则表达式匹配问题

[复制链接]
swsw222 发表于 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
学渣 发表于 2018-9-17 23:57:06 | 显示全部楼层
我觉得你可以改变一下思路,把roomidd的值转换成数组,然后在数组中查找键值等于roomzx的值。
 楼主| swsw222 发表于 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};   //这样就不能匹配
学渣 发表于 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开发中,尽量减少使用正则,影响性能
 楼主| swsw222 发表于 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可以,但不会写,有其它更好的方法吗?


学渣 发表于 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字符串转成数组吗?
 楼主| swsw222 发表于 2018-9-19 09:59:13 | 显示全部楼层
已解决,加了个$roomzx = json_encode($roomInfo['user'],true);就搞定
 楼主| swsw222 发表于 2018-9-19 10:16:07 | 显示全部楼层
学渣 发表于 2018-9-19 09:58
上面我不是说过把json字符串转成数组吗?

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

本版积分规则