仔细检查我的IF AND OR语句

时间:2010-12-14 16:46:16

标签: php

这是合乎逻辑的...如果$ dirchk1和$ dirchk2存在或者只是$ dirchk1存在继续处理。但如果只存在$ dirchk2,则处理else语句。提前致谢

$dirchk1 = "/temp/files/" . $data[0] . ".doc";
$dirchk2 = "/temp/files/" . $data[1] . ".doc"; 
    if (is_file($dirchk1) && is_file($dirchk2)) || (is_file($dirchk1)) {
//.. do code 
    } else {
    ...// only $dirchk2 exist
    }

编辑:抱歉,我没有提到,如果$ dirchk1和$ dirchk2不存在,那么else语句应该处理。

6 个答案:

答案 0 :(得分:4)

如果$dirchk2是否存在并不重要,那么只需将其从条件中拉出来。

    if (is_file($dirchk1)) {

答案 1 :(得分:4)

不完全。只要存在//.. do code,您就希望执行$dirchk1,否则如果存在$dirchk2则执行else,所以:

if (is_file($dirchk1)) {
    //.. do code 
} elseif (is_file($dirchk2)) {
    // only $dirchk2 exist
}

答案 2 :(得分:3)

不,我不认为这是对的。在else的情况下没有检查dirchk2,而你的if ($1 && $2) || $1案例会重新排序到$1 && ($2 || true) == $1而没有$ 2检查。你可能想要

if (is_file($dirchk1)) {
    //.. do code 
} elseif (is_file($dirchk2)) {
    // only $dirchk2 exist
}

答案 3 :(得分:2)

您的else即使两个都不存在也会执行,if也不会检查第二个条件。所以,这样做:

 if (is_file($dirchk1) && is_file($dirchk2)) || (is_file($dirchk1) && !is_file($dirchk2))
 {
     //.. do code 
 }
 elseif((is_file($dirchk2))
 {
    ...// only $dirchk2 exist
 }

答案 4 :(得分:2)

“这是合乎逻辑的吗?”
我相信答案是否定的。

let p = is_file($dirchk1)
let q = is_file($dirchk2)

  |p |p'|
--+--+--+
q |1 |0 |
--+--+--+
q'|1 |0 |

如果只有p为真,你想做代码,然后如果只有q为真,那么简化如下:

if (is_file($dirchk1))
{
  //do code
}
else if (is_file($dirchk2))
{
  //only $dirchk2 exists
}

编辑:在OP指定需要成为else块的一部分的false / false条件之后:

最终答案应该是:

if (is_file($dirchk1))
{
  //do code
}
else
{
  //dirchk2 may or may not exist
}

答案 5 :(得分:1)

你提到:但是如果只有$ dirchk2存在则处理else语句。

转换为以下TT:

$dirchk1   $dirchk2   process?

true       true       if-block
true       false      if-block
false      false      if-block
false      true       else-block

转换为:

if( ($dirchk1 && $dirchk2) || (!$dirchk2) ) {
  // if block
} else {
  // else block
}

或者您也可以这样做:

if(! (!$dirchk1 && $dirchk2) ) {
  // if block
} else {
  // else block
}