如果和其他声明混淆了

时间:2014-02-10 14:20:12

标签: php if-statement

我正在执行以下if if声明,但是数字( // 1)和数字( // 4)同时执行,我找到了它很难理解为什么。

    <?php

    //1

    if($a == 1 && count($b) == 0) {

 // do this
    }

//2
elseif ($a == 1 && count($b) > 0)   {
// do that

}

//3
if($a== 0 && count($b) == 0) {

// do a different thing
}

//4
else {
// do the last thing

}
?>

我已经完成了这个并且它有效,但我认为应该是一个更适合不使用elseif的方法。

else if($a== 0 && count($b) > 0) {
 // do the last thing
}

4 个答案:

答案 0 :(得分:2)

  

但是数字(// 1)和数字(// 4)同时执行

这是因为你在if on // 3

之前没有else
//3
if($a== 0 &&

更改为elseif($a== 0 &&

目前您有两个独立的IF条件

答案 1 :(得分:1)

你在第一个if之后错过了一个右大括号。

此外,您在第一个条件中有一个奇怪的操作符:$$。也许您打算输入&&

答案 2 :(得分:1)

$a = 10;

if ($a == 5) {
  echo 'ok';
} elseif ($a == 10) { // $a is equal to 10, so it executes;
  echo 'not_ok';
}

if ($a > 20) {
   echo 'ok_ok';
} else { // $a is not >20 so else statement executes
   echo 'not_not';
}

最终结果:not_oknot_not

如果您在同一个受让人身上执行此类测试但值不同,您可能不想执行多个测试?

我猜你需要ifif,如果

,则需要第三个块
if ($a == 5) {
  echo 'ok';
} elseif ($a == 10) { // $a is equal to 10, so it executes and stops the block;
  echo 'not_ok';
} elseif ($a > 20) {
   echo 'ok_ok';
} else { // $a is not >20, but the block was stopped on first elseif
   echo 'not_not';
}

生成not_ok

即使您按照建议的第一个elseif块移动了else语句

if ($a > 20) {
   echo 'ok_ok';
}

将执行,如果是,它将产生结果,这将再次导致双重结果

答案 3 :(得分:0)

您可能想要这样做......

if ($a == 1 && count($b) == 0) {
// do this

}
//2
elseif ($a == 1 && count($b) > 0) {
// do that

}
elseif ($a== 0 && count($b) == 0) {
// do a different thing

}
else {
// do the last thing

}

他们同时执行的原因是......从技术上来说,它们不是同时执行的,因为它是程序性的,但它们都被执行,因为它们在其他条件下都是不同的。如果您只想执行1次,则应将它们组合起来:)