当前位置:Gxlcms > PHP教程 > php如何实现只替换一次或N次

php如何实现只替换一次或N次

时间:2021-07-01 10:21:17 帮助过:4人阅读

 我们都知道,在PHP里Strtr,strreplace等函数都可以用来替换,不过他们每次替换的时候都是全部替换,举个例子:
"abcabbc",这个字符串如果使用上边的函数来把其中的b替换掉,那么他会全部替换掉,但是如果你想只替换一个或两个怎么办呢?看下边的解决方法:
     这是个比较有点意思的问题,正好之前也做过类似的处理,当时我是直接利用preg_replace实现的。

     mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
     在subject 中搜索pattern 模式的匹配项并替换为replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
     因为preg_replace的第四个参数可以实现替换次数的限制,所以这个问题这样处理很方便。但是在查看php.com上关于str_replace的函数评论后,从中居然也可以挑出几个有代表性的函数来。

方法一:str_replace_once
思路首先是找到待替换的关键词的位置,然后利用substr_replace函数直接替换之。

  1. <?php
  2. function str_replace_once($needle, $replace, $haystack) {
  3. // Looks for the first occurence of $needle in $haystack
  4. // and replaces it with $replace.
  5. $pos = strpos($haystack, $needle);
  6. if ($pos === false) {
  7. // Nothing found
  8. return $haystack;
  9. }
  10. return substr_replace($haystack, $replace, $pos, strlen($needle));
  11. }
  12. ?>

方法二、str_replace_limit
思路还是利用preg_replace,只不过它的参数更象preg_replace了,而且对某些特殊字符做了转义处理,通用性更好。

  1. <?
  2. function str_replace_limit($search, $replace, $subject, $limit=-1) {
  3. // constructing mask(s)...
  4. if (is_array($search)) {
  5. foreach ($search as $k=>$v) {
  6. $search[$k] = '`' . preg_quote($search[$k],'`') . '`';
  7. }
  8. }
  9. else {
  10. $search = '`' . preg_quote($search,'`') . '`';
  11. }
  12. // replacement
  13. return preg_replace($search, $replace, $subject, $limit);
  14. }
  15. ?>

大家可以结合小编之前整理的一篇文章《php关键字仅替换一次的实现函数》一起学习,相信大家会有意想不到的收获。

人气教程排行