如何用更短的方式写这个 if 语句
How to write this if statement(s) shorter way
能不能写得短点?我无法更改 accept_lang 方法,它总是 returns 布尔值。
if ($ci->agent->accept_lang('en-US') OR $ci->agent->accept_lang('en-GB') OR $ci->agent->accept_lang('en-au'))
使用以下内容怎么样?复制自
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;
}
?>
也许不会更短,但一个简单的循环可能会有所帮助。
首先添加最常见的区域以减少检查次数,如果找到则停止检查。
<?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;
}
}
?>
基本上,您是在使用 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)) {
// ...
}
能不能写得短点?我无法更改 accept_lang 方法,它总是 returns 布尔值。
if ($ci->agent->accept_lang('en-US') OR $ci->agent->accept_lang('en-GB') OR $ci->agent->accept_lang('en-au'))
使用以下内容怎么样?复制自
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;
}
?>
也许不会更短,但一个简单的循环可能会有所帮助。 首先添加最常见的区域以减少检查次数,如果找到则停止检查。
<?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;
}
}
?>
基本上,您是在使用 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)) {
// ...
}