初学php不久,一道题目,个人的做法是吧这些标题分别存到不同的数组,然后针对不同的数组进行循环遍历分别+=. 不过别人说这样还不如原来的,所以想请教下正确的方法是什么
$xcount=0; $pos = strpos($newtitle, ''); if($pos) $xcount+=3; $pos = strpos($newtitle, '卖肾'); if($pos) $xcount+=3; $pos = strpos($newtitle, '收肾'); if($pos) $xcount+=3; $pos = strpos($newtitle, '24小时'); if($pos) $xcount+=3;//24小时 $pos = strpos($newtitle, '咨询热线'); if($pos) $xcount+=3;//24小时 $pos = strpos($newtitle, '找小姐'); if($pos) $xcount+=6;//24小时 $pos = strpos($newtitle, '服务信息'); if($pos) $xcount+=6;//24小时 $pos = strpos($newtitle, '学生妹'); if($pos) $xcount+=6;//24小时 $pos = strpos($newtitle, '找小姐'); if($pos) $xcount+=6;//24小时
//
$pos = strpos($newtitle, '男女公关'); if($pos) { echo 'Fail, No Uid.';exit;} $pos = strpos($newtitle, '女公关'); if($pos) { echo 'Fail, No Uid.';exit;} $pos = strpos($newtitle, '男公关'); if($pos) { echo 'Fail, No Uid.';exit;} $pos = strpos($newtitle, '公关'); if($pos) { echo 'Fail, No Uid.';exit;} $pos = strpos($newtitle, '招聘');
![]() | 1 nigelvon 2015-03-02 18:07:19 +08:00 循环遍历为啥不如原来的,同样的代码重复N遍很爽么。 |
2 lijinma 2015-03-02 18:09:46 +08:00 原题目是啥? |
![]() | 3 EXDestroyer OP @nigelvon 对方的说法是,逻辑上没有原来的好,看上去不好维护 我是把+=+,+=3,以及fail的三部分分开存到三个数组,对他们分别进行遍历 |
![]() | 4 EXDestroyer OP @lijinma http://d1kt.cn/course/pluginfile.php?file=/5031/mod_assign/intro/ssw.php 修改这段代码,使程序结构更漂亮更好维护一点 |
5 invite 2015-03-02 18:18:05 +08:00 不是应该: {key:value} 么? |
6 raincious 2015-03-02 18:25:34 +08:00 能将原题贴上来么? 这代码写的不好。不知道你什么意图,如果是搜索字符串是否存在,那么if($pos)这样的用法就是错的。 |
![]() | 7 branchzero 2015-03-02 18:30:10 +08:00 猜测应该是违禁词屏蔽? <?php $words = ['','关键词太多了自己后面接着加']; foreach($words as $word){ if(strpos($newtitle, $word)) exit('Fail, No Uid.'); } ?> 搞定 |
![]() | 8 Moker 2015-03-02 18:32:36 +08:00 话说那些关键词 没人注意到么 |
![]() | 9 jswh 2015-03-02 18:35:28 +08:00 如果我写的话估计是这样子的 $cOnfig= [ 'xCountPlus3' => [], 'xCountPlus6' => [], 'NoUidAndExit' => [], ]; $xCount = 0; foreach($config as $action => $keywords) { foreach($keywords as $word) { if(strpos($newTitle, $word) !== false) { $action($xCount); } } } function xCountPlus3(&$xCount) { $xCount += 3; } function xCountPlus6(&$xCount) { } ... |
![]() | 10 b821025551b 2015-03-02 18:36:20 +08:00 7L正解 |
11 hwiiago 2015-03-02 18:37:41 +08:00 $sensitiveWords = array('' => 3, '卖肾' => 3, '收肾' => 3, '找小姐' => 6); $xcount = 0; foreach($sensitiveWords as $key => $value) { if (strpos($newtitle, $key) !== false) { $xcount += $value; } } |
![]() | 12 zhujinliang 2015-03-02 18:40:03 +08:00 我的话会用正则搞,让正则处理器自己去优化 |
![]() | 13 jk2r 2015-03-02 18:47:40 +08:00 和敏感词过滤类似呀。 你需要一个“多模式匹配”的PHP实现(AC状态机/Double-array Trie树),查出有的词; 然后k-v查分数吧 |
![]() | 14 qqjt 2015-03-02 19:03:55 +08:00 只有我好奇这个是用在哪里的么,又是找小姐又是学生妹…… |
![]() | 15 EXDestroyer OP @raincious 原题在4楼了 |
![]() | 16 msg7086 2015-03-02 19:48:08 +08:00 via iPhone if pos 什么鬼 |
![]() | 17 br00k 2015-03-02 20:55:04 +08:00 是我应该会这样吧,感觉这种还是用数组方便,就是title也是数组for嵌套,也比单纯if好,不然数组内容多了,会增加太多无用代码。 $title = "xxx"; $str = ["", "卖肾", "收肾", "24小时", "咨询热线", "找小姐", "服务信息"]; foreach ($str as $value) { if (false !== strpos($title, $value)) { echo $value; exit; } } |
![]() | 18 alex321 2015-03-02 21:23:22 +08:00 $str = array('', '卖肾', '收肾', '24小时', '咨询热线', '找小姐', '服务信息','男女公关','男公关','女公关','公关','招聘'); preg_match('('.implode($str, '|').')', $newtitle, $matches); return strlen(implode($matches, '')); |
![]() | 19 Jaylee 2015-03-02 21:29:16 +08:00 表驱动法 |
![]() | 20 jookr 2015-03-02 23:24:29 +08:00 以前我弄个采集QQ空间的网站也用到这个违禁词遍历,出现则该页面不显示。 IDC先拔线再QQ通知我整改,然后续费的时候不租给我了,网站没这么赚钱就关了。 |
![]() | 22 EXDestroyer OP http://pan.baidu.com/s/1gd1pcD9 我传到百度网盘了,题干没别的,就是说如何优化这段程序 |
![]() | 23 viowan 2015-03-03 11:56:16 +08:00 9楼正解吧 感觉。最开始的代码结构也长,缩进感觉也有问题。改成数组之后明朗多了。 |
![]() | 24 EXDestroyer OP |