2011-01-13 103 views
-2

这是我工作的一个代码的部分:PHP多如果...... ELSEIF声明

if($access == 2) 

{ 

    if ($permre['pages'] == indi_add)// 
     {echo "show page";} 

    if ($permre['pages'] == mass_add)// 
     {echo "show page";} 

    if ($permre['pages'] == export)// 
     {echo "show page";} 

} 

elseif ($access == 0) 

{ 

    if ($permre['pages'] == indi_add)// 
     {echo "dont show page";} 

    if ($permre['pages'] == mass_add)// 
     {echo "dont show page";} 

    if ($permre['pages'] == export)// 
     {echo "dont show page";}** 

} 

我创建一个页面,在执行诸如$access == 2的条件有多个值。一些值包括:indi_add,mass_add和export。然后我想用这些值创建3个条件,如上所示。

但是,执行此代码时,只有第一个if语句正在执行,其余不是。有没有一种方法可以让php一次检查3条if语句并执行所要求的操作?

加上,我不能使用if(condition1 && condition2 && condition3),因为有可能不满足其中一个条件。

那么,即使第一条语句是真或假,我该如何执行所有语句呢?我实际上得到了诸如indi_add,mass_add和从phpmyadmin数据库导出的值。查询是这样的:

“从访问权限选择页访问= 2”。

由于上面的查询,我得到了上面提到的页面值。回声页面只是一个例子。在我的实际编码中,如果access == 2的声明为true,则结果是将激活特定页面。我正在尝试做类似访问控制的操作。此外,在幕后,管理员可以更改每个页面的访问级别。因此,每次访问级别更改时,上面的查询可能会带来不同的结果。我希望找到一种方法,只要他们是真的,我就可以执行if条件。

+0

您是使用编辑过的缩进还是先前将echo语句注释掉? – Dave 2011-01-13 07:24:25

+0

srry是一个noob,但你是什么意思通过编辑缩进... – neelima 2011-01-13 08:08:08

+0

[替换条件与多态](http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism) – Gordon 2011-01-13 09:02:04

回答

3

你说“它有多个值”。有什么?因为这个区块:

if ($permre['pages'] == indi_add)// {echo "show page";} 
if ($permre['pages'] == mass_add)// {echo "show page";} 
if ($permre['pages'] == export)// {echo "show page";} 

只会有1次命中。变种$permre['pages']只能有一个值。每次运行脚本时都是不同的,但每次运行时都不能同时有“indi_add”和“mass_add”。

另外:wat是indi_add。不应该是"indi_add",如果它是一个字符串或$indi_add如果它是一个变量?

2

我会用一个开关,而不是所有的,如果statments

switch ($i) { 
    case 0: 
     echo "i equals 0"; 
     break; 
    case 1: 
     echo "i equals 1"; 
     break; 
    case 2: 
     echo "i equals 2"; 
     break; 
} 
0

的我会去这样的事情:

switch($access) { 
    case 2: 
    switch($premre['pages']) { 
     case "indi_add": 
     case "mass_add": 
     case "export": 
     echo "show page"; 
     break; 
    } 
    break; 
    default: 
     echo "not show page"; 
     break; 
} 

如果你需要的东西单独发生的每个语句只需将其添加到他们的案件,然后打破它。如果您需要特定的事情发生,只需用第一个类似的案例替换即可。

编辑:例如用由OP

switch($access) { 
    case 2: 
    switch($premre['pages']) { 
     case "indi_add": 
     echo "something happens here when indi_add is run"; 
     doSomething(); //Runs a function for indi_add 
     break; 
     case "mass_add": 
     echo "something happens here when mass_add is run"; 
     doSomethingElse(); //Runs another function for indi_add 
     break; 
     case "export": 
     echo "show page for export"; 
     break; 
    } 
    break; 
    default: 
     echo "not show page"; 
     break; 
} 
0

也许我误解,但单一的变量不能有多个值的请求将代码添加到每一种情况下。

可以,但是,如果以某种方式编码包含多个值。在这种特殊情况下,您可能正在寻找位掩码/标志。

首先定义“价值”,确保不重叠的位模式(除非这让你的价值体系):

define('indi_add', 0x0001); 
define('mass_add', 0x0002); 
define('export', 0x0004); 

现在,您可以将其组合到使用位或操作符|一个变量:

$permre['pages'] = indi_add | mass_add; 

最后,检查使用位AND运算符&如果变量包含标志之一:

if ($permre['pages'] & indi_add)// 
    {echo "show page";} 

if ($permre['pages'] & mass_add)// 
    {echo "show page";} 

if ($permre['pages'] & export)// 
    {echo "show page";}