【问题标题】:how to use str replace in php如何在 php 中使用 str_replace
【发布时间】:2019-10-26 10:44:37
【问题描述】:

数组 ( [0] => 数组 ( [trigger] => E [alttext] => C ) [1] => 数组 ( [trigger] => F [alttext] =>D ) )

foreach ($trigger as $tdata) {
                $tr = $tdata['trigger'];
                $ttext = $tdata['alttext'];
                $text= str_replace($tr, $ttext, 'A B E F');
           //If im echo this result then result is 
           Result = A B C F A B E D

            }

还有:

   foreach ($trigger as $tdata) {
                $tr = $tdata['trigger'];
                $ttext = $tdata['alttext'];
                $text= str_replace($tr, $ttext, 'A B E F');
                      }
            //If im echo this result then result is 
          Result = A B E D

但我想显示A B C D

提前致谢!

【问题讨论】:

    标签: php regex preg-replace-callback


    【解决方案1】:

    我认为问题在于您总是回到原始字符串进行替换 - 您需要进行累积更改。所以这里它用原始字符串设置$text,并且每次都在这个字符串中进行替换......

       $text = 'A B E F';
       foreach ($trigger as $tdata) {
           $tr = $tdata->trigger;
           $ttext = $tdata->alttext;
           $text= str_replace($tr, $ttext, $text);
        }
    
        echo $text;
    

    使用此方法唯一需要注意的是,如果您之前替换的文本是您稍后搜索和替换的内容。所以E -> F 和 F -> D 将是 A B D D。

    更新:

    使用您的测试数据...

    $trigger = Array ( Array ( "trigger" => "E", "alttext" => "C" ) , 
        Array ( "trigger" => "F", "alttext" =>"D" ) );
    $text = 'A B E F';
    foreach ($trigger as $tdata) {
        $tr = $tdata['trigger'];
        $ttext = $tdata['alttext'];
        $text= str_replace($tr, $ttext, $text);
    }
    
    echo $text;
    

    【讨论】:

    • 不知道你是怎么得到结果的,能不能把你的代码展示一下。
    • Array ( [0] => Array ( [trigger] => E [alttext] => C ) [1] => Array ( [trigger] => F [alttext] =>D ) ) 我的数据库结构
    • 如果您的基础数据是数组 - 将以下行更改为使用 [] - $tr = $tdata['trigger']; $ttext = $tdata['alttext'];,我得到的输出是 A B C D
    • 我做到了,但没有结果 :( 只更新了最后一个结果 = A B E D
    • 我已经添加了我测试过的内容。
    【解决方案2】:

    考虑一下(假设这些与您的数据库行相似):

    <?php
    $rows = [
        ['E', 'C'],
        ['F', 'D']
    ];
    
    foreach($rows as $row) {
        $find    = $row[0];
        $replace = $row[1];
        echo str_replace($find, $replace, 'A B E F');
    }
    

    输出:

    A B C FA B E D
    

    我们可以通过以下两种方法一次性完成:

    可以通过str_replace两个数组对应的查找和替换:

    echo str_replace(array_column($rows, 0), array_column($rows, 1), 'A B E F');
    

    输出:

    A B C D
    

    或将 strtr 与数组一起使用(从 => 到)(['E'=&gt;'C', 'F'=&gt;'D']):

      echo strtr('A B E F', array_column($rows, 1, 0));
    

    输出:

    A B C D
    

    您必须构建查找和替换数组,并使用其中一种适合的方法。请注意,str_replace 和 strtr 替换的方式略有不同。

    【讨论】:

    • Array ( [0] =&gt; Array ( [trigger] =&gt; E [alttext] =&gt; C ) [1] =&gt; Array ( [trigger] =&gt; F [alttext] =&gt;D ) )我的数据库结构
    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多