有条件的检查

时间:2013-08-19 16:26:22

标签: php conditional

我正在尝试使条件代码依赖于用户是否禁用了左侧或右侧栏。我有以下

<?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

当我将其中一个侧边栏关闭时,我做错了什么使它不会改变?

3 个答案:

答案 0 :(得分:0)

因为你有:

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

并且您正在使用“OR”逻辑运算符,它将始终与第一个if语句匹配,因为$right_sidebaron。将“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';
}

答案 1 :(得分: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

希望这有帮助!

答案 2 :(得分:0)

你的逻辑运算符错了,例如在这里:

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

你要说的是,如果离开它或者离开它做了什么,但你想要把它放在AND(&amp;&amp;)右边它做了什么。检查此link它可能有用