PHP! = Ve == operatörler

7 Cevap

Bu bir süre için beni boggled etti. Ben bir dizin üzerinden çalışan ve içindekileri dışarı echo'ing ve ben ".." dışlamak istiyorum ve ben "." dosyaları.

Şimdi, bu kod çalışır:

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

Ama bu değil ...

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

Gerçekten gerçek bir ifadedir şey yapmak zorunda nefret ediyorum çünkü bariz nedenlerle kod ikinci yumru, ne istediğiniz daha fazladır.

Herhangi bir yardım için teşekkür ederiz.

7 Cevap

Eğer iki tek koşullar ve birlikte ("ve" veya "veya") oluşan bir durum inkâr ederseniz, ayrı ayrı her bir durumu inkâr ve diğer birleşimini kullanmak gerekir.

Peki yerine bu deneyin:

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

, Anadili ;) - Umarım bu mantıklı

Bu deMorgan's Laws biridir.

not (A OR B) = (not A) AND (not B)

Eğer yapıyoruz değişiklik refactoring denilen Reverse Conditional olduğunu

Onlar karşıtların değil ...

Check out de Morgan's laws.

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

olmalıdır

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

Sadece -(-x + 2) matematik negates gibi, inkâr tüm ifade var everything.

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

Yadsınması değil mi

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

Eğer OR inkâr etmedi çünkü. OR tersi bir sonuç olduğu ve:

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

$file!=".." true değerlendirir, basitçe AND operatörünü kullanın:

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

Ancak, bunun yerine DirectoryIterator kullanabilirsiniz:

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

Bu:

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

olmalıdır:

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

Alternatif olarak, her zaman kullanabilirsiniz DirectoryIterator ve özellikle o isDot yöntemidir.