这是合乎逻辑的...如果$ 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语句应该处理。
答案 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
}