2013-08-19 88 views
0

我試圖做一個條件代碼依賴於用戶是否禁用了左側或右側欄。我有我有以下有條件檢查

<?php 

$left_sidebar = 'off'; 
$right_sidebar = 'on'; 


if ($left_sidebar == 'on' || $right_sidebar == 'on') { 

    $left_sidebar_width = 'four_columns'; 
    $right_sidebar_width = 'four_columns'; 
    $center_width = 'eight_columns'; 

} else if ($left_sidebar == 'on' || $right_sidebar == 'off') { 

    $left_sidebar_width = 'four_columns'; 
    $right_sidebar_width = 'disabled'; 
    $center_width = 'twelve_columns'; 

} else if ($left_sidebar == 'off' || $right_sidebar == 'on') { 

    $left_sidebar_width = 'disabled'; 
    $right_sidebar_width = 'four_columns'; 
    $center_width = 'twelve_columns'; 

} else { 

    $left_sidebar_width = 'disabled'; 
    $right_sidebar_width = 'disabled'; 
    $center_width = 'sixteen_columns'; 
} 

echo $left_sidebar_width; 
echo '<br />'; 
echo $right_sidebar_width; 
echo '<br />'; 
echo $center_width; 
echo '<br />'; 

?> 

問題是,不管是什麼我改變$ left_sidebar或$ right_sidebar它總是說

four_columns 
four_columns 
eight_columns 

我在做什麼錯了,當我打開這使得它不會改變其中一個側邊欄關閉?

+0

我認爲你想'&&'運算符而不是'||'運算符。 – vee

回答

0

因爲你有:

$left_sidebar = 'off'; 
$right_sidebar = 'on'; 

和您正在使用「或」邏輯運算符,它總是會因爲$right_sidebaron比賽第if聲明。將「OR」||運營商更改爲「AND」&&,並且您應該獲得預期的結果。

if ($left_sidebar == 'on' && $right_sidebar == 'on') { 

    $left_sidebar_width = 'four_columns'; 
    $right_sidebar_width = 'four_columns'; 
    $center_width = 'eight_columns'; 

} else if ($left_sidebar == 'on' && $right_sidebar == 'off') { 

    $left_sidebar_width = 'four_columns'; 
    $right_sidebar_width = 'disabled'; 
    $center_width = 'twelve_columns'; 

} else if ($left_sidebar == 'off' && $right_sidebar == 'on') { 

    $left_sidebar_width = 'disabled'; 
    $right_sidebar_width = 'four_columns'; 
    $center_width = 'twelve_columns'; 

} else { 

    $left_sidebar_width = 'disabled'; 
    $right_sidebar_width = 'disabled'; 
    $center_width = 'sixteen_columns'; 
} 
0

你的條件語句目前計算爲如果的條件之一是真實TRUE。你需要做的是檢查這兩個的條件是否屬實。所以,你需要一個&&而不是||

說明:

你可以用var_dump()檢查條件語句的結果:

var_dump(($left_sidebar == 'on' || $right_sidebar == 'on')); 
var_dump(($left_sidebar == 'on' || $right_sidebar == 'off')); 
var_dump(($left_sidebar == 'on' || $right_sidebar == 'on')); 

上面的代碼輸出:

bool(true) 
bool(false) 
bool(true) 

將其更改爲:

var_dump(($left_sidebar == 'on' && $right_sidebar == 'on')); 
var_dump(($left_sidebar == 'on' && $right_sidebar == 'off')); 
var_dump(($left_sidebar == 'on' && $right_sidebar == 'on')); 

產生輸出:

bool(false) 
bool(false) 
bool(false) 

參考PHP Manual獲得更多信息。

希望這會有所幫助!

0

你的邏輯運算符這是錯的,比如在這裏:

else if ($left_sidebar == 'on' || $right_sidebar == 'off') { 

你說如果離開它在權或關閉做一些事情,但你想,如果離開了它在與(& &)的權利是關閉做某事。檢查這個link它可能是有用的