初学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通知我整改,然后续费的时候不租给我了,网站没这么赚钱就关了。 |
21
jookr 2015-03-02 23:32:33 +08:00
@EXDestroyer 选课密码是什么?没密码看不了原题
|
22
EXDestroyer OP http://pan.baidu.com/s/1gd1pcD9
我传到百度网盘了,题干没别的,就是说如何优化这段程序 |
23
viowan 2015-03-03 11:56:16 +08:00
9楼正解吧 感觉。最开始的代码结构也长,缩进感觉也有问题。改成数组之后明朗多了。
|
24
EXDestroyer OP |