对于批量替换关键字的问题,仅替换而言没什么可说的,但这里需要的是每个关键字仅需要替换一次就可以了。查阅了php相关函数文档,发现php本身是没有函数实现这个功能的,所以不得不自己解决了。总结了几种可行方法,小记一下!
(1)使用 preg_replace 函数实现这个功能,因为 preg_replace 这个函数本身是可以实现控制替换次数的,所以一开始就想到他了,具体实现方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//可以实现替换次数的控制,不仅限于只替换一次,比如$limit为2的时候表示一个词出现很多吃的时候仅替换2次,-1表示全部替换。$search 和 $replace 都可以是字符串或者数组,但必须对应 function str_replace_limit( $search , $replace , $content , $limit =-1){ if ( is_array ( $search )){ foreach ( $search as $k => $v ){ $search [ $k ]= '`' .preg_quote( $search [ $k ], '`' ). '`' ; } } else { $search = '`' .preg_quote( $search , '`' ). '`' ; } //把图片描述去掉 $content =preg_replace( "/alt=([^ >]+)/is" , '' , $content ); return preg_replace( $search , $replace , $content , $limit ); } |
(2)使用substr_replace 函数来实现,不过这里仅能实现仅一次替换
1
2
3
4
5
6
7
8
9
10
|
//首先找到关键字所在位置,然后使用 substr_replace(系统函数)进行替换操作 function str_replace_once( $search , $replace , $content ){ //把图片描述去掉 $content =preg_replace( "/alt=([^ >]+)/is" , '' , $content ); $pos = strpos ( $content , $search ); if ( $pos ===false){ return $haystack ; } return substr_replace( $content , $replace , $pos , strlen ( $search )); } |
`以上就是PHP只替换一次以及控制替换次数的实现函数,希望对大家的学习有所帮助。