【问题标题】:Make bold specific part of string使字符串的特定部分加粗
【发布时间】:2014-05-08 22:55:59
【问题描述】:

我有一个类似的数组

 $array[]="This is a test";
 $array[]="This is a TEST";
 $array[]="TeSt this";

我需要将字符串'test'设置为bold like

 $array[]="This is a <b>test</b>";
 $array[]="This is a <b>TEST</b>";
 $array[]="<b>TeSt</b> this";

我试过str_replace(),但它区分大小写,

注意: 我需要将给定的字符串加粗并保持原样。

【问题讨论】:

    标签: php arrays string


    【解决方案1】:

    您可以使用array_walk PHP 函数来替换数组中的字符串值。检查下面的代码

    function my_str_replace(&$item){
      $item = preg_replace("/test/i", '<b>$0</b>', $item);
    }
    
    $array[]="This is a test";
    $array[]="This is a TEST";
    $array[]="TeSt this";
    
    array_walk($array, 'my_str_replace');
    

    编辑:基于 John WH Smith 的评论

    您可以简单地使用 $array = preg_replace("/test/i", '&lt;b&gt;$0&lt;/b&gt;', $array); 来发挥作用

    【讨论】:

    • 我会强烈建议在此处进一步阅读有关 PHP 参考 (&amp;$item) 的内容。为什么不从那里开始:stackoverflow.com/questions/2157799/…(我不确定array_walk 在这里是否真的必要,因为preg_replace 可以同时处理字符串和数组(mixed 参数:fr2.php.net/preg_replace))
    【解决方案2】:

    如果您正在寻找模式而不是像“test”这样的固定字符串,请查看 REGEXes 和 preg_replace

    $str = preg_replace("#(test|otherword)#i", "<b>$1</b>", $str);
    

    更多关于正则表达式:

    编辑:在 REGEX 后添加“i”以消除区分大小写。

    【讨论】:

      【解决方案3】:

      您可以使用我在下面编写的函数:

      function wrap_text_with_tags( $haystack, $needle , $beginning_tag, $end_tag ) {
          $needle_start = stripos($haystack, $needle);
          $needle_end = $needle_start + strlen($needle);
          $return_string = substr($haystack, 0, $needle_start) . $beginning_tag . $needle . $end_tag . substr($haystack, $needle_end);
          return $return_string;
      }
      

      所以你可以这样称呼它:

      $original_string = 'Writing PHP code can be fun!';
      $return_string = wrap_text_with_tags( $original_string , 'PHP' , "<strong>" ,"</strong>");
      

      返回的字符串如下所示:

      原始字符串

      编写 PHP 代码可以很有趣!

      修改后的结果

      编写 PHP 代码会很有趣!

      此函数仅适用于字符串的第一个实例。

      【讨论】:

        【解决方案4】:

        试试str_ireplacestr_replace的不区分大小写版本

        【讨论】:

        • str_ireplace("test", "&lt;b&gt;test&lt;/b&gt;", $string) 确实使“测试”加粗,您可以将此值存储在其他地方并保持原始文本不变。这是一个有效的答案,无论获得多少反对票都不会被删除。
        • 编辑后,现在很清楚(不是很清楚)您想用&lt;b&gt;TeSt&lt;/b&gt; 替换TeSt。您应该使用建议的正则表达式解决方案
        • 抱歉暗示。事实上,我后来意识到我应该投反对票。我应该明白,在替换文本时,我们应该保持原样,从您的示例中可以清楚地看出。再次抱歉
        • 感谢您帮助我 :)
        【解决方案5】:

        试试这个 Using str_ireplace

        str_ireplace("test", "<b>test</b>", $array);
        str_ireplace("TSET", "<b>TEST</b>", $array);
        

        【讨论】:

        • @shijin 在发布问题之前提及您的确切要求您说**我已经尝试使用 str_replace() 但它区分大小写,请帮助我**这就是为什么我被提供str_ireplace
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-27
        相关资源
        最近更新 更多