【问题标题】:Replace multiple words with Str_Replace用 Str_Replace 替换多个单词
【发布时间】:2012-09-21 20:34:57
【问题描述】:

我想用一个特定的词替换多个同义词。

<?p

$a = array(
'truck',
'vehicle',
'seddan',
'coupe',
'Toyota',
);
$b = array(
'car',
'car',
'car',
'car',
'Lexus',
);
$str = '

Honda is a truck. 
Toyota is a vehicle. 
Nissan is a sedan. 
Scion is a coupe.

';
echo str_replace($a,$b,$str);
?>

结果:本田是一辆汽车。雷克萨斯是一辆汽车。日产是一辆汽车。 Scion 是一辆车。

谁能告诉我用“汽车”一词替换“车辆、卡车、双门轿车、轿车”的简洁方法,而不是让我单独替换所有 4 个。谢谢。

【问题讨论】:

    标签: php string replace


    【解决方案1】:
    $a = array( 'truck', 'vehicle', 'sedan', 'coupe' );
    $str = 'Honda is a truck. Toyota is a vehicle. Nissan is a sedan. Scion is a coupe.';
    echo str_replace($a,'car',str_replace('Toyota','Lexus',$str));
    

    【讨论】:

    • 这似乎不起作用。它不会用“汽车”代替“卡车”......结果最终是“本田是一辆汽车。雷克萨斯是一辆。日产是一辆轿车。Scion 是一辆。”
    • 更新了我的答案 - 第二个参数必须是单个字符串以允许多次替换。很抱歉。
    • 你能告诉我如何纠正这个修改后的代码版本吗? codepad.org/DhPgwPCR 谢谢!
    【解决方案2】:

    你应该使用strtr

    echo strtr($str,array_combine($a,$b)); 
    

    或者只是将$a$b 组合成一个数组

    $ab = array('truck' => 'car','vehicle' => 'car','sedan' => 'var','coupe' => 'var','Toyota' => 'Lexus');
    echo strtr($str, $ab);
    

    输出

    Honda is a car. 
    Lexus is a car. 
    Nissan is a car. 
    Scion is a car.
    

    【讨论】:

      【解决方案3】:

      我找到了一个非常简单的解决方案来替换字符串中的多个单词:

      <?php
       $str="    Honda is a truck. 
      Toyota is a vehicle. 
      Nissan is a sedan. 
      Scion is a coupe.";
      
      
      $pattern=array();
      $pattern[0]="truck";
      $pattern[1]="vehicle";
      $pattern[2]="sedan";
      $pattern[3]="coupe";
      
      
      
      $replacement=array();
      $replacement[0]="car";
      $replacement[1]="car";
      $replacement[2]="car";
      $replacement[3]="car";
      
      
      
      echo str_replace($pattern,$replacement,$str);?> 
      

      输出:

        Honda is a car. 
      Toyota is a car. 
      Nissan is a car. 
      Scion is a car
      

      使用此脚本,您可以根据需要替换字符串中任意数量的单词:

      只需将单词(您要替换的)放在模式数组中,例如:

           $pattern[0]="/replaceme/"; 
      

      并将字符(将用于代替被替换的字符)放入替换数组中,例如:

            $replacement[0]="new_word"; 
      

      编码愉快!

      【讨论】:

      • 这个例子也适用于 preg_replace() 函数,如果你想使用 **preg_replace 而不是 str_replace,请分隔模式字符串,例如:pattern[0]=" /卡车/";
      【解决方案4】:

      有点像

      $a = array( 'truck', 'vehicle', 'seddan', 'coupe' ); 
      
      $str = 'Honda is a truck. Toyota is a vehicle. Nissan is a sedan. Scion is a coupe.'; 
      
      echo str_replace($a,'car',$str); 
      

      应该可以。

      http://codepad.org/1LhtcOSR

      编辑:

      这样的事情应该会产生预期的结果:http://pastebin.com/xGzYiCk3

      $text = '{test|test2|test3} some other stuff {some1|some2|some3}';
      

      输出:

      test3 其他一些东西 some1 test2 其他一些东西 some2 test3 一些其他的东西 some3 test3 其他一些东西 some1

      【讨论】:

      • 嗨,我试着给你投票,但它不让我。我是新来的。你能帮我更正这段代码吗? codepad.org/DhPgwPCR 谢谢
      • 您需要更详细地说明您要完成的工作,我可以提供更好的帮助:)
      • 好的,所以我使用这个网站“旋转文章”来随机选择不同的同义词,例如每次出现在文章中时以随机顺序使用“故事或故事或故事情节”。 ezarticlelink.com/articlespinner/free.php 这就是我正在使用的网站。尝试输入“这本书的{故事|故事|故事情节}非常好。”你可以通过旋转一篇文章来明白我的意思。但是修改后的代码不能正确输出。
      • 要获得这种类型的功能,您需要编写一个解析器,该解析器将使用以下值之一为您指定的格式 {story|storyline|etc...} 解析文章(文本)随机的。在这种情况下,简单的 str_replace 将不起作用。
      • 网站进行随机化。问题是脚本输出然后在输出值内替换,例如“{story|{story|tale|{story|tale|storyline}}|{story |tale|storyline}}" 而不是像 "{story|tale|storyline}" 那样只做一次
      【解决方案5】:

      用于用其他短语替换短语(一次多个)。您可以将数组作为参数传递给str_replace()

      // Provides: You should eat pizza, beer, and ice cream every day
      $phrase  = "You should eat fruits, vegetables, and fiber every day.";
      $healthy = ["fruits", "vegetables", "fiber"];
      $yummy   = ["pizza", "beer", "ice cream"];
      
      $newPhrase = str_replace($healthy, $yummy, $phrase);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-01
        • 2016-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多