php替换怎么替换指定位置字符

字符串一共有固定13破折号,破折号前面都有内容,最后面固定.html我想替换任意一个破折号前面或者后面的内容,怎么写啊,有可能内容是空比如字符串是21--------43... 字符串一共有固定13破折号,破折号前面都有内容,最后面固定.html
我想替换任意一个破折号前面或者后面的内容,怎么写啊,有可能内容是空
比如字符串是21--------43-----哈啊.html
我想把第1个破折号前面的21替换成aaa
第2个破折号后面的空内容替换成bbb
第8个破折号后面的43替换成ccc
展开
 我来答
babyfans隆哥
2019-04-18 · TA获得超过112个赞
知道小有建树答主
回答量:205
采纳率:77%
帮助的人:66.1万
展开全部
function replace($str,$index,$s){
//参数定义:
//$str  原字符串
//$index 要替换的位置(第一个"-"前面的位置为0,最后一个"-"后面的位置等于减号数量)
//$s  要替换的内容
$str=rtrim(rtrim($str,'html'),'.');
$arr=explode('-',$str,14); //如果是前面固定13个减号,可以加一个参数14
if($index>=count($arr)){
$arr[count($arr)-1]=$s;
}else if($index<0){
$arr[0]=$s;
}else{
$arr[$index]=$s;
}
return (implode('-', $arr).'.html');
}

$string='21--------43-----哈啊.html';

$newStr=replace($string,0,'aaa'); //第1个减号前面的位置替换为aaa
echo $newStr . '<br>';

$newStr=replace($newStr,2,'bbb'); //第2个减号后面的位置替换为bbb
echo $newStr . '<br>';

$newStr=replace($newStr,8,'ccc'); //第8个减号后面的位置替换为ccc
echo $newStr;

注意:原字符串结尾部分不能连续两个"html"或者连续两个"."连着

如果原字符串在替换的时候不加".html"就没有这个限制了,就像这样

function replace($str,$index,$s){
//参数定义:
//$str  原字符串
//$index 要替换的位置(第一个"-"前面的位置为0,最后一个"-"后面的位置等于减号数量)
//$s  要替换的内容
$arr=explode('-',$str,14); //如果是前面固定13个减号,可以加一个参数14
if($index>=count($arr)){
$arr[count($arr)-1]=$s;
}else if($index<0){
$arr[0]=$s;
}else{
$arr[$index]=$s;
}
return (implode('-', $arr).'.html');
}

$string='21--------43-----哈啊';

$newStr=replace($string,0,'aaa'); //第1个减号前面的位置替换为aaa
echo $newStr . '.html<br>';

$newStr=replace($newStr,2,'bbb'); //第2个减号后面的位置替换为bbb
echo $newStr . '.html<br>';

$newStr=replace($newStr,8,'ccc'); //第8个减号后面的位置替换为ccc
echo $newStr . '.html';

应该能用吧

追问

可以用,谢谢!但是突然发现一个问题,因为最后面的“哈啊”是中文的,里面有可能有减号,怎么才能控制到了13个减号的后面的都替换呢?因为前面13个减号都是固定的,后面的是中文+.html,可能包含减号

你看我这样修改正常不,怕后面用了整个程序出错

匿名用户
2019-04-18
展开全部
$str = '21--------43-----哈啊.html';
$arr = explode('-', $str);
$j = 0;
$new = array();
foreach ($arr as $key => $val) {
    $new[] = $val;
    if ($val == '') {
        ++ $j;
        if ($j == 1) {
            $new[$key - 1] = 'aaa';
        } elseif ($j == 3) {
            $new[$key - 1] = 'bbb';
        } elseif ($j == 8) {
            $new[$key - 1] = 'ccc';
        }
    }
}
var_dump(implode('-', $new));die;

试试看行不

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
归山彤0GE460
2019-06-24 · TA获得超过101个赞
知道小有建树答主
回答量:298
采纳率:0%
帮助的人:47.4万
展开全部
substr_replace
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式