PHP随机批量插入字符串函数
两个函数实现不同的效果,不过两个效果有些类似,就是把一个字符串插入到另一个字符串的指定位置。这个问题看似简单,不过PHP里面中文字符占三位,其它字符占一位,所以一不留神就乱码了。转换了几个思路,最后用递归做出来了。下面上源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/** * 将指定子字符串插入到指定字符串的指定子字符串后面, * 可以限制插入次数,并可以统计实际插入次数 * @param string $str 原字符串 * @param string $search 搜索字符串 * @param string $substr 要插入的字符串 * @param integer $limit 插入次数限制 * @param integer $count 统计一共插入了多少次 * @return string 插入后的字符串 */ function str_insert($str, $search, $substr,$limit=-1,&$count=null){ if($count==false) { $count=0; } $rtStr = ""; $pos = stripos($str, $search); if($limit==0||$pos==false) { return $str; } $count++; $pos += strlen($search); $startStr = substr($str, 0,$pos).$substr; $str = substr($str, $pos); $rtStr= $startStr.str_insert($str,$search,$substr,$limit-1,$count); return $rtStr; } |
上面的是要指定字符串,而下面修改的是可以随机批量插入字符串的效果!用于一段字符串中随机插入关键词还是可以用用的!其他用处再考虑!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/** * 将指定子字符串集随机插入到指定字符串的指定子字符串后面, * 可以限制插入次数,并可以统计实际插入次数 * @param string $str 原字符串 * @param string $search 搜索字符串 * @param array $substrArr 要插入的字符串集合 * @param integer $limit 插入次数限制 * @param integer $count 统计一共插入了多少次 * @return string 插入后的字符串 */ function str_insert2($str, $search, $substrArr=array(),$limit=-1,&$count=null){ if($count==false) { $count=0; } $rtStr = ""; $pos = stripos($str, $search); if($limit==0||$pos==false) { return $str; } $count++; $pos += strlen($search); $startStr = substr($str, 0,$pos).$substrArr[array_rand($substrArr)]; $str = substr($str, $pos); $rtStr= $startStr.str_insert2($str,$search,$substrArr,$limit-1,$count); return $rtStr; } |
靠,写的绕嘴的很,用着舒服就行了!