str_replace除了第一个之外

时间:2016-05-09 22:49:34

标签: php str-replace

我把一个小函数放在一起来查找和替换文本块中的字符串,但它似乎耗尽了资源。我认为这是因为我试图在整个HTML页面上运行它。

我真正想做的就是替换除标题标签之外的所有文字。

这是我的功能:

/**
 * Find and replace strings with skip
 *
 * @param string $haystack
 * @param string $needle
 * @param int    $start
 * @param int    $skip
 *
 * @return mixed
 */
function skip_and_replace($haystack, $needle, $start = 0, $skip = 0) {
    $count = 0;
    while ($pos = strpos(($haystack), $needle, $start) !== false) {
        if ($count <= $skip)
            continue;

        substr_replace($haystack, ' M<sup>c</sup>', $pos, strlen($needle));

        $start = $pos+1;

        $count++;
    }

    return $haystack;
}

任何人都可以帮助让这个功能更容易记忆或让我知道是否有更好的方法来实现我的最终目标?

1 个答案:

答案 0 :(得分:2)

如果要替换除字符串的第一个实例之外的所有实例,这应该可行。不能保证它能够很好地扩展,但这是我想到的第一件事。

$haystack = "foo bar baz foo bar baz foo bar baz";
$oldtext = "bar";
$newtext = "rab";

$arr = explode($oldtext, $haystack, 2);
$arr[1] = str_replace($oldtext, $newtext, $arr[1]);
$new_string = implode($oldtext, $arr);