假设我有一个字符串
$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可以做到
谢谢您的帮助
正如你的问题所问的,你想用它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);
strpos
有一个偏移量,详细在这里: http: //php.net/manual/en/function.strrpos.php
因此,您想要执行以下操作:
1)strpos为1024,保持偏移
2) strpos 1024 从 offset+1 开始,保持 newoffset
3) strpos 1024 从 newoffset+1 开始,保持thirdoffset
4) 最后,我们可以使用 substr 进行替换 - 获取导致 1024 的第三个实例的字符串,将其连接到您想要替换它的内容,然后获取字符串其余部分的 substr 并将其连接起来到那个。http://www.php.net/manual/en/function.substr.php
这是我要做的,它应该工作,无论值如何$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);
您可以使用 strpos() 三次来获取字符串中第三个 1024 的位置,然后替换它,或者您可以编写一个正则表达式以与匹配第三个 1024 的 preg_replace() 一起使用。
如果你想找到你的字符串的最后一次出现,你可以使用strrpos
这是一个解决方案,对同一个函数的调用较少,并且无需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);