1

假设我有一个字符串

$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可以做到

谢谢您的帮助

4

7 回答 7

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);
于 2013-04-26T15:23:06.480 回答
0

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

于 2013-04-26T15:19:24.203 回答
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);
于 2013-04-26T15:35:28.113 回答
0

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

于 2013-04-26T15:21:23.667 回答
0

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

于 2013-04-26T15:21:37.647 回答
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);
于 2013-04-26T15:22:59.370 回答
0

像这样做:

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

查看工作演示

于 2013-04-26T15:23:58.937 回答