str replace - 替换x值

时间:2013-04-26 15:15:12

标签: php string replace

假设我有一个字符串

  

$ STR = “0000,1023,的 1024 下,1025,的 1024 下,1023,1027,1025,的 1024 下,1025,0000” ;

有三个1024,我想用JJJJ替换第三个,就像这样:

  

输出:

     

0000,1023,的 1024 下,1025,的 1024 下,1023,1027,1025,的 JJJJ 下,1025,0000

如何让 str_replace 可以做到

感谢您的帮助

7 个答案:

答案 0 :(得分:1)

正如您的问题所示,您希望使用str_replace来执行此操作。它可能不是最好的选择,但这是你使用该功能所做的。假设整个字符串中没有其他“JJJJ”实例,您可以这样做:

$str = "0000,1023,1024,1025,1024,1023,1027,1025,1024,1025,0000";
$str = str_replace('1024','JJJJ',$str,3)
$str = str_replace('JJJJ','1024',$str,2);

答案 1 :(得分:0)

strpos有一个偏移量,详见:http://php.net/manual/en/function.strrpos.php

所以你想要做以下事情:

1)strpos用1024,保持偏移量

2)使用1024从偏移+ 1开始的strpos,保持newoffset

3)strpos以1024开始于newoffset + 1,保持第三偏移

4)最后,我们可以使用substr来进行替换 - 获取导致第三个1024实例的字符串,将其连接到你要替换它的内容,然后获取其余字符串的substr并将其连接到那。 http://www.php.net/manual/en/function.substr.php

答案 2 :(得分:0)

您可以使用strpos()三次来获取字符串中第三个1024的位置然后替换它,或者您可以编写一个正则表达式以与匹配第三个1024的preg_replace()一起使用。

答案 3 :(得分:0)

如果您想查找字符串的最后一次出现,可以使用strrpos

答案 4 :(得分:0)

这是一个解决方案,对同一个函数的调用较少,而且不需要explode,再次迭代数组和implode

// replace the first three occurrences
$replaced = str_replace('1024', 'JJJJ', $str, 3);
// now replace the firs two, which you wanted to keep
$final = str_replace('JJJJ', '1024', $replaced, 2);

答案 5 :(得分:0)

这样做:

$newstring = substr_replace($str,'JJJJ', strrpos($str, '1024'), strlen('1024') );

请参阅working demo

答案 6 :(得分:0)

以下是我要做的事情,无论$str中的值如何,它都应该有效:

function replace_str($str,$search,$replace,$num) {
    $pieces = explode(',',$str);
    $counter = 0;
    foreach($pieces as $key=>$val) {
        if($val == $search) {
            $counter++;
            if($counter == $num) {
                $pieces[$key] = $replace;
            }
        }
    }
    return implode(',',$pieces);
}

$str="0000,1023,1024,1025,1024,1023,1027,1025,1024,1025,0000";

echo replace_str($str, '1024', 'JJJJ', 3);

我认为这是你在评论中提出的问题:

function replace_element($str,$search,$replace,$num) {
    $num = $num - 1;
    $pieces = explode(',',$str);
    if($pieces[$num] == $search) {
        $pieces[$num] = $replace;
    }
    return implode(',',$pieces);
}
$str="0000,1023,1024,1025,1024,1023,1027,1025,1024,1025,0000";
echo replace_element($str,'1024','JJJJ',9);