【问题标题】:How to write this if statement(s) shorter way [duplicate]如何以更短的方式编写此 if 语句 [重复]
【发布时间】:2015-03-06 18:20:13
【问题描述】:

可以写得更短吗?我无法对 accept_lang 方法进行更改,它总是返回一个布尔值。

if ($ci->agent->accept_lang('en-US') OR $ci->agent->accept_lang('en-GB') OR $ci->agent->accept_lang('en-au'))

【问题讨论】:

  • 不,你不能,不改变方法
  • 您是要避免调用该方法 3 次,还是只想在该行中减少字符数?
  • 少字符,@Flosculus
  • @singhakash 我知道如何检查数组中是否有东西,我只是好奇如果我必须使用这个框架内置方法是否可以把它写得更短。跨度>
  • 你愿意用另一个函数来缩短它吗?

标签: php coding-style


【解决方案1】:

基本上,您使用in_array i.c.w 在结果数组中寻找真值。 array_map可以构造如下单行;

if (in_array(true, array_map(array($ci, "accept_lang"), array("en-US", "en-GB", "en-au"))))

为了更清楚地显示正在发生的事情,稍微拆分一下;

$langAccept = array_map(array($ci, "accept_lang"), array("en-US", "en-GB", "en-au"));
if (in_array(true, $langAccept)) {
    // ...
}

【讨论】:

    【解决方案2】:

    也许不会更短,但一个简单的循环可能会有所帮助。 首先添加最常见的区域以减少检查次数,并在找到时停止检查。

    <?php
    foreach(array('en-US','en-GB','en-au') as $lang) {if($ci->agent->accept_lang($lang)){stuff();break;}}
    ?>
    

    或爆发:

    <?php
    foreach(array('en-US','en-GB','en-au') as $lang) {
      if($ci->agent->accept_lang($lang)){
        stuff(); // or whatever else you need, or set a $flag = true
        break;
      }
    }
    ?>
    

    【讨论】:

    • 干杯,也许不是最有效的方法,但这是我正在考虑的事情,但我想不到自己。
    【解决方案3】:

    如何使用以下内容?复制自

    Detect Browser Language in PHP

    你为什么不保持简单和干净

    <?php
    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
    switch ($lang){
        case "fr":
            //echo "PAGE FR";
            include("index_fr.php");//include check session FR
            break;
        case "it":
            //echo "PAGE IT";
            include("index_it.php");
            break;
        case "en":
            //echo "PAGE EN";
            include("index_en.php");
            break;        
        default:
            //echo "PAGE EN - Setting Default";
            include("index_en.php");//include EN in all other cases of different lang detection
            break;
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 2023-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多