PHP 替换字符串的问题。

现在有个替换字符串的表。
设计如下

before after
6

想通过数据库把字符串中含有before的字符串替换成after
比如 $str_before = "五一6";
替换之后是 $str_after = "伍乙六";

代码如下

$str_before = "五一6";
$master =DB::table('master')->get();//从数据库中取出所有数据
    //循环遍历
    foreach ($word_master as $key => $value) {
    $masterChange = [
        'before' => $value->before,
         'after' => $value->after,
    ];
    //替换
     $str_after = str_replace($masterChange['before'],$masterChange['after'],$str_before);
    } 

     echo"$str_after";

出来的永远是没变的 但是我自己手动输入数据却可以。。不知道哪里犯错了。。
怎么想都没想明白。dd出来的$master['before'],$master['after']都是对的,就是替换不了。

⬇︎第一次零基础搭建的个人博客。欢迎批评指正,大力鞭策!❤︎ 旺财的个人博客(⌯¤̴̶̷̀ω¤̴̶̷́)✧ January 17th, 2020
chihokyo
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

代码贴的太不完整,其实有更简单的办法是:

    $map = [
        '替换前' => '替换后',
        'before' => 'after',
         ...
    ];
    $full_string = str_ireplace(array_keys($map), array_values($map), $full_string);
    return $full_string;
5年前 评论
讨论数量: 12
ruke

file

5年前 评论
chihokyo

@ruke 谢谢 手误手误 已修正 也是没替换效果的

5年前 评论
ruke

@chihokyo 这只是最后一条数据的替换结果

5年前 评论
ruke

你先检查一下最后一条数据是啥,对比一下

5年前 评论

代码贴的太不完整,其实有更简单的办法是:

    $map = [
        '替换前' => '替换后',
        'before' => 'after',
         ...
    ];
    $full_string = str_ireplace(array_keys($map), array_values($map), $full_string);
    return $full_string;
5年前 评论
ruke

我没太明白你意思, 我刚开始还以为你想得到每次替换的结果呢. 要是你要经过所有替换
@Wi1dcard 的答案就行了

5年前 评论
chihokyo

@ruke 是哦 不过也谢谢您给我新的思路学习了一下基础的知识。:kissing_heart:
@Wi1dcard 成功解决问题谢谢!:kissing_closed_eyes:

5年前 评论
ruke
        $str_before = "五一6";
        $master = [
            (object)[
                'before' => '6',
                'after' => '六'
            ],
            (object)[
                'before' => '五',
                'after' => '伍'
            ]
        ];
        //php_version > 5.6
        $replace_arr = array_column($master, 'after', 'before');
        $after_str = strtr($str_before, $replace_arr);
        return $after_str;

闲得无聊,我也贴一个试试

5年前 评论
chihokyo

@ruke
看了这个觉得不用foreach代码量能稍微少一点
于是试了一下,出现了这个错误
array_column() expects parameter 1 to be array, object given
搜索了一下。第一个参数必须是多维数组(记录集)。
我dd出来之后我的第一个参数确实是记录集啊。

5年前 评论
ruke

@chihokyo php5.6之前这个函数不支持object都一样,达到效果就行

5年前 评论
chihokyo

@ruke
可我是7.2.9啊
这个方法我先记录下来了 以后万一能用得到。谢谢您!

5年前 评论

foreach ($master as &$v){ if(strstr($v->before,'五一6')){ $v->after= '伍乙六'; } }
不知道符不符合需求

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!