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')

contact、illustration、gallery、webdesign はリダイレクトされ、問題なく動作しています。ただし、他のすべてのページにはコード A が追加されます。

$path が web_tjenester'、'webdesigndetails'、'vismahjemmeside'、'joomla'、'vismanettbutikk'、'vpasp'、または 'artportfolio' の場合にのみ、コード A が期待されます。

誰かが私の間違いを指摘して修正してもらえますか?

前もって感謝します。

- アップデート -

以下は機能しますが、コードを短くする方法はありますか?

繰り返します ($path==..)。

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

5 に答える 5

5

||演算子は論理演算子です。式のセマンティクスは、orがtrue に評価される場合は truea || bに評価れ、それ以外の場合はfalseに評価されるというものです。ab

('web_tjenester' || … || 'artportfolio')したがって、式がブール値に評価されるため、意図した方法で使用することはできません(具体的には、ブール変換を使用してtrue'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 に答える