假设我有一个字符串
$ 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 可以做到
感谢您的帮助
答案 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);