0

我有以下代码,重定向页面取决于 $path。

...
$path = $this->uri->segment(3);
$pathid = $this->uri->segment(4);
if($path=='forsiden'){
            redirect('','refresh');
        }elseif($path =='contact'){
            redirect('welcome/kontakt','refresh');
        }elseif($path =='illustration'){
            $this->_gallery($path,$pathid);
        }elseif($path =='webdesign'){
            redirect('welcome/webdesign','refresh');    
        }elseif($path==('web_tjenester' || 'webdesigndetails' || 
                        'vismahjemmeside' || 'joomla' || 'vismanettbutikk' || 
                        'vpasp' || 'artportfolio')){
        ...
     CODE A   
     ...    

}else{
        ...
        CODE B
        ...
                }

我没有得到正确的结果

$path==('web_tjenester' || 'webdesigndetails' || 
'vismahjemmeside' || 'joomla' || 'vismanettbutikk' || 
'vpasp' || 'artportfolio')

联系人、插图、画廊和网页设计已重定向并且工作正常。但是,所有其他页面都添加了 CODE A。

只有当 $path 是 web_tjenester'、'webdesigndetails'、'vismahjemmeside'、'joomla'、'vismanettbutikk'、'vpasp' 或 'artportfolio' 时,我才期待 CODE A。

任何人都可以指出我的错误并纠正我吗?

提前致谢。

- 更新 -

以下工作,但有什么方法可以缩短代码?

我在重复($path==..)。

elseif(($path=='web_tjenester') || ($path=='webdesigndetails') || 
    ($path=='vismahjemmeside') || ($path=='joomla') || ($path=='vismanettbutikk') || 
    ($path=='vpasp') || ($path=='artportfolio')){
4

5 回答 5

5

||运算符是逻辑运算符。表达式的语义a || b是,如果其中一个或计算结果为true,则计算结果为true ,否则计算结果为falseab

所以它不能以你想要的方式使用它,因为表达式('web_tjenester' || … || 'artportfolio')将被评估为一个布尔值(具体来说:true as使用boolean conversion'web_tjenester'评估为true),然后将与 的值进行比较。$path

如果要测试某个值是否在一组值中,可以使用数组并使用以下命令测试该值in_array

in_array($path, array('web_tjenester', 'webdesigndetails', 'vismahjemmeside', 'joomla', 'vismanettbutikk', 'vpasp', 'artportfolio'))
于 2010-03-07T17:53:27.813 回答
1
$path==('web_tjenester' || 'webdesigndetails' || 
'vismahjemmeside' || 'joomla' || 'vismanettbutikk' || 
'vpasp' || 'artportfolio')

这不是有效的语法,您需要$path ==在每个字符串前面用 OR 分隔。看起来更好的更简单的方法是将所有字符串放在一个数组中,然后使用该in_array()函数进行检查。

$array = array('web_tjenester', 'webdesigndetails', 
'vismahjemmeside', 'joomla', 'vismanettbutikk',
'vpasp', 'artportfolio');
if (in_array($path, $array)) {
    // do whatever
}
于 2010-03-07T17:53:20.957 回答
1

因为$path == ('x' || 'y')意味着“评估'x || y',看看它是否等于$path。你需要做

if($path == 'x' || $path == 'y')

但是,您可能需要考虑 switch 语句:

switch($patch) {
   case 'web_tjenester':
   case 'webdesigndetals':
          so_and_so();
          break; 
   case 'contact':
          redirect();
          break;
}

但是,在这样做之前先阅读开关:)

于 2010-03-07T17:54:01.313 回答
0

你不能按照你的方式去做:你应该用 $path 比较所有东西,所以

$path=='web_tjenester' || $path=='webdesigndetails' || 
$path=='vismahjemmeside' || $path=='joomla' || $path=='vismanettbutikk' || 
$path=='vpasp' || $path=='artportfolio'
于 2010-03-07T17:53:47.103 回答
0

你不能这样做

$path==('web_tjenester' || 'webdesigndetails' || 'vismahjemmeside' || 'joomla' || 'vismanettbutikk' ||'vpasp' || 'artportfolio')

它应该是

$path=='web_tjenester' || $path=='webdesigndetails' || $path=='vismahjemmeside' || $path=='joomla' ...

您可以设置您在数组中使用的路径并[in_array()][1]用于更简洁的代码。

于 2010-03-07T17:54:43.483 回答