Ответ 1
Если вы отрицаете условие, состоящее из двух отдельных условий и конъюнкции ( "и" или "или" ), вам нужно отдельно отменить каждое условие и использовать другую конъюнкцию.
Поэтому попробуйте это вместо:
if ($file != ".." AND $file != ".")
Это немного озадачило меня. Я просматриваю каталог и эхо из его содержимого, и я хочу исключить ".." и ".". файлы.
Теперь этот код работает:
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>";
}
}
}
По очевидным причинам второй кусок кода больше того, чего я хочу, потому что я действительно ненавижу, что истинное утверждение ничего не делает.
Если вы отрицаете условие, состоящее из двух отдельных условий и конъюнкции ( "и" или "или" ), вам нужно отдельно отменить каждое условие и использовать другую конъюнкцию.
Поэтому попробуйте это вместо:
if ($file != ".." AND $file != ".")
Это один из deMorgan Laws.
not (A OR B) = (not A) AND (not B)
Изменение, которое вы делаете, это refactoring, называемый Обратный условный
Они не противоположности...
Ознакомьтесь с законами Моргана.
if($file != ".." OR $file != ".")
должен быть
if($file != ".." AND $file != ".")
Вы должны отрицать все выражение, так же, как -(-x + 2)
в математике отменяет все:
if ($file == ".." OR $file == ".")
Не отрицание
if ($file != ".." OR $file != ".")
Потому что вы не отрицали ИЛИ. Противоположностью OR является AND, в результате чего:
if ($file != ".." AND $file != ".")
$file != ".."
имеет значение true. Вместо этого просто используйте оператор AND:
if ( $file != '..' && $file != '.' ) { }
Однако вместо этого я использовал бы DirectoryIterator:
foreach (new DirectoryIterator('temp') as $fileInfo) {
if ($fileInfo->isDot())
continue;
echo $fileInfo->getFilename() . "<br>\n";
}
Это:
if ($file != ".." OR $file != ".")
должен быть:
if ($file != ".." && $file != ".")
В качестве альтернативы вы всегда можете использовать DirectoryIterator и, в частности, isDot.