PHP的“!=”和“==”运算符的区别

3

这个问题困扰了我一段时间。我正在遍历一个目录并输出它的内容,我想排除 ".." 和 "." 文件。

现在,这段代码可以正常工作:

if ($files = scandir("temp/"))
{
    foreach ($files as $file)
    {
        if ($file == ".." OR $file == ".")
        {
        }
        else {
            echo $file;
            echo "<br>";
        }
    }
}

但这并不意味着...
if ($files = scandir("temp/"))
{
    foreach ($files as $file)
    {
        if ($file != ".." OR $file != ".")
        {
            echo $file;
            echo "<br>";
        }
    }
}

出于显而易见的原因,第二组代码更符合我想要的,因为我真的不喜欢让 true 语句什么都不做。


2
你真的需要在一些问题上选择一个被接受的答案。 - Josh Mein
7个回答

22
如果你要否定由两个单条件和一个连接词("and"或"or")组成的条件,你需要分别否定每个条件,并使用另一个连接词。
所以请尝试使用以下方法:
if ($file != ".." AND $file != ".")

9

4
他们不是相反的…… 看看德摩根定律。
if($file != ".." OR $file != ".")

应该是

if($file != ".." AND $file != ".")

2

$file != ".." 这段代码的结果是true。相反,只需使用AND运算符:

if ( $file != '..' && $file != '.' ) { }

然而,我会使用DirectoryIterator代替:
foreach (new DirectoryIterator('temp') as $fileInfo) {
    if ($fileInfo->isDot())
        continue;
    echo $fileInfo->getFilename() . "<br>\n";
}

2
你需要否定整个表达式,就像数学中的 -(-x + 2) 否定了 所有 的东西一样:
if ($file == ".." OR $file == ".")

不是否定

if ($file != ".." OR $file != ".")

因为您没有否定 OR。OR 的反义词是 AND,结果是 a:
if ($file != ".." AND $file != ".")

1

这个:

    if ($file != ".." OR $file != ".")

应该是:

    if ($file != ".." && $file != ".")

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接