上周五公司同事让帮忙做一下文章处理工作。就是文章中会有一些@@@@这种组合的字符,数量大多在10个以上,处理的要求是将所有的文章中的@@@@字符剔除到只剩下十个或者九个,并且尽量剔除除了手段和尾段的其它的文章中的这种符号。
这个。。。如果一篇篇文章的看的话,那就不用想了。好几十万的文章啊。。。所以只能自己像个办法来搞一下了。首先,这个读取咱就不多说了,咱们直接看重点,那就是剔除那一步。
我的思路是这样的,首先获取所有的符号在文章中所出现的位置,然后嘞,在这个位置中,使用rand函数来进行随机,并且使用rand中的参数来控制在除了手段和尾段之外的位置。确定好了位置之后那就简单了,直接使用substr这个函数来进行截取并且多截取几个字符来保证截取的字符的唯一性,然后再进行替换等操作,其中,咱们可以使用static来保证每次调用的都是已经替换过的变量。下面咱们就来看它的核心代码吧。
首先是获取所有@@@@位置的代码:
function getCharpos2($str, $char) { $j = 0; $arr = array(); $count = substr_count($str, $char); for($i = 0; $i < $count; $i++){ $j = strpos($str, $char, $j); $arr[] = $j; $j = $j+1; } return $arr; }
之后嘞,就是通过控制rand的参数来控制所需要替换的范围了。嘿嘿,这里特别提醒下,咱们每次用完一个位置信息后,是需要使用unset函数清除数组中的这个值的哦。下面只是个简单的版本,大家可以根据自己的需求更改下:
function get_str($str) { static $str_s = ""; $number = getCharpos2($str, "@@@@"); $count_len = count($number); if($count_len > 10){ $rand_num = rand(0,$count_len); $sub_str = substr($str,$number[$rand_num],8); $replace = str_replace("@@@@","",$sub_str); $str_s = str_replace($sub_str,$replace,$str); unset($number[$rand_num]); } unset($replace); unset($sub_str); if(count(getCharpos2($str_s, "@@@@")) == 10 | count(getCharpos2($str_s, "@@@@")) == 9){ return $str_s; }else{ return get_str($str_s); } }好啦,本次记录就到这里了。如果感觉不错的话,请多多点赞支持哦。。。