簡體   English   中英

在PHP中使用||或OR

[英]Usage of ||, OR in PHP

我有以下代碼,這些頁面重定向頁面取決於$ 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')

聯系人,插圖,畫廊和網頁設計已重定向,可以正常使用。 但是,所有其他頁面都添加了代碼A。

我只在$ path為web_tjenester,webdesigndetails,vismahjemmeside,joomla,vismanettbutikk,vpasp或artportfolio時才期待CODEA。

有人可以指出我的錯誤並糾正我嗎?

提前致謝。

-更新-

以下工作有效,但是有什么方法可以縮短代碼?

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

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

|| 運算符是邏輯運算符 表達式a || b的語義 a || b是它的計算結果為true,如果任ab值為真 ,否則為假

因此不能以您想要的方式使用它,因為表達式('web_tjenester' || … || 'artportfolio')將被評估為布爾值(具體來說: true,因為'web_tjenester'使用布爾值轉換true ),然后將其與$path的值進行比較。

如果要測試某個值是否在一組值中,則可以使用一個數組,並使用in_array測試該值:

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

這是無效的語法,您需要在$path == OR $path ==的每個字符串前加上$path == 看起來更好的方法是將所有字符串放入數組中,然后使用in_array()函數進行檢查。

$array = array('web_tjenester', 'webdesigndetails', 
'vismahjemmeside', 'joomla', 'vismanettbutikk',
'vpasp', 'artportfolio');
if (in_array($path, $array)) {
    // do whatever
}

因為$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;
}

在這樣做之前先閱讀一下開關,但是:)

您不能以自己的方式來做:您應該將所有內容與$ path進行比較,因此

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

你做不到

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

它應該是

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

您可以設置數組中使用的路徑,並使用[in_array()][1]獲得更清晰的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM