如何写这个if语句更短的方式

时间:2015-01-08 15:18:54

标签: php coding-style

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

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

3 个答案:

答案 0 :(得分:0)

如何使用以下内容?它是

的副本

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;
}
?>

答案 1 :(得分:0)

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

<?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;
  }
}
?>

答案 2 :(得分:0)

基本上,您使用in_array i.c.w在结果数组中寻找true。 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)) {
    // ...
}