gpt4 book ai didi

php - 比嵌套 if-else 更好的解决方案?

转载 作者:行者123 更新时间:2023-12-04 06:14:51 24 4
gpt4 key购买 nike

不知道这如何用更好的标题来描述这一点,但这是我的问题:

我有一个带有多个 bool 选项的替换函数:

  • 正则表达式
  • 整个单词(仅当 regex==false 时)
  • 区分大小写

  • 这意味着我必须从 4 种方法中选择一种来替换我的文本。目前我的代码如下所示:

    (此处的这些选项确实是作为字符串的真/假,通过 POST 从一组 jquery checkboxes 传入)
        if($regex=='true')
    {
    if($casesens=='true')
    {
    $p->aData['body'] = preg_replace('/'.$q.'/', $r, $p->aData['body']);
    }
    else
    {
    $p->aData['body'] = preg_replace('/'.$q.'/i', $r, $p->aData['body']);
    }
    }
    else
    {
    if($wwords=='true')
    {
    $q = " ".$q." ";
    $r = " ".$r." ";
    }
    if($casesens=='true')
    {
    $p->aData['body'] = str_replace($q, $r, $p->aData['body']);
    }
    else
    {
    $p->aData['body'] = str_ireplace($q, $r, $p->aData['body']);
    }
    }

    如您所见,如果必须比较 $casesens在这两种情况下,如果我必须向 UI 添加更多选项,这将变得越来越复杂。
    有没有更好或更优雅的方式来写这个?

    最佳答案

    您可以简单地检查 $casesens一次并定义一个这样的变量:

    if($casesens=='true') {
    $case = 'i';
    }

    然后像任何其他变量一样在正则表达式模式中使用它:
    $p->aData['body'] = preg_replace('/'.$q.'/'.$case, $r, $p->aData['body']);

    这将解决第一个 if .至于第二种,我可以想到两种方法:
  • 创建一个类似于 str_replace 的函数和 stri_replace这需要一个额外的 bool 参数,忽略大小写,并调用适当的字符串替换函数。
  • 您可以使用 preg_replace而不是像您以前那样使用字符串替换函数,并使用与我上面解释的相同的方法来解决问题。
  • 关于php - 比嵌套 if-else 更好的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382894/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com