PHP多个if ... elseif语句

时间:2011-01-13 07:15:37

标签: php if-statement conditional-statements

这是我正在处理的代码的一部分:

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),因为有可能不满足其中一个条件。

那么即使第一个语句是真还是假,我该如何执行所有语句呢?我实际上从phpmyadmin数据库获取indi_add,mass_add和export等值。查询是这样的:

  

“从access = 2”的访问中选择页面。

由于上面的查询,我得到的页面值是上面提到的。 echo页面只是一个例子。在我的实际编码中,如果access == 2的语句为真,则结果是将激活特定页面。我正在尝试做一些像访问控制的事情。此外,在场景后面,管理员可以更改每个页面的访问级别。因此,每次访问级别更改时,上述查询可能会带来不同的结果。我希望找到一种方法,只要它们是真的,我就可以执行if条件。

4 个答案:

答案 0 :(得分: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']只能有一个值。每次运行脚本时都不同,为true,但每次运行时,它不能同时具有“indi_add”和“mass_add”。

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

答案 1 :(得分:2)

我会使用开关而不是所有if语句

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

答案 2 :(得分: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;
}

答案 3 :(得分:0)

也许我误解了,但是单个变量不能有多个值。

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

首先定义“值”,确保不重叠位模式(除非在您的系统中允许这样做):

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

现在,您可以使用按位OR运算符|将这些组合成变量:

$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";}