2009-11-02 228 views
3

這讓我有些驚訝。我正在瀏覽一個目錄並回顯其內容,我想排除「..」和「。」。文件。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>"; 
     } 
    } 
} 

出於顯而易見的原因代碼的第二疙瘩更是我想要的,因爲我真的很討厭有真實的陳述什麼也不做。

+2

你真的需要選擇一個接受的答案對你的一些問題。 – 2010-01-28 14:12:36

回答

22

如果您否定由兩個單一條件和一個連詞(「和」或「或」)組成的條件,則需要單獨否定每個條件並使用其他連接詞。

那麼試試這個來代替:

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

非常好,很好的解釋。 – 2009-11-02 20:27:12

+5

德摩根法則+ 1年! http://en.wikipedia.org/wiki/De_Morgan%27s_laws – 2009-11-02 20:27:31

+0

呃......你顯然可以接受這個;) – Franz 2009-11-02 20:55:54

1

此:

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

應該是:

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

你要否定整個表達式,就像-(-x + 2)數學否定一切

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

不是

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

因爲你沒有否定OR。 OR的相反是AND,導致:

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