Операторы PHP!= И ==

Это немного озадачило меня. Я просматриваю каталог и эхо из его содержимого, и я хочу исключить ".." и ".". файлы.

Теперь этот код работает:

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

По очевидным причинам второй кусок кода больше того, чего я хочу, потому что я действительно ненавижу, что истинное утверждение ничего не делает.

Ответ 1

Если вы отрицаете условие, состоящее из двух отдельных условий и конъюнкции ( "и" или "или" ), вам нужно отдельно отменить каждое условие и использовать другую конъюнкцию.

Поэтому попробуйте это вместо:

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

Ответ 4

Вы должны отрицать все выражение, так же, как -(-x + 2) в математике отменяет все:

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

Не отрицание

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

Потому что вы не отрицали ИЛИ. Противоположностью OR является AND, в результате чего:

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

Ответ 5

$file != ".." имеет значение true. Вместо этого просто используйте оператор AND:

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

Однако вместо этого я использовал бы DirectoryIterator:

foreach (new DirectoryIterator('temp') as $fileInfo) {
    if ($fileInfo->isDot())
        continue;
    echo $fileInfo->getFilename() . "<br>\n";
}

Ответ 6

Это:

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

должен быть:

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

Ответ 7

В качестве альтернативы вы всегда можете использовать DirectoryIterator и, в частности, isDot.