2009-11-02 6 views
3

Cela m'a bogué pendant un moment. Je cours à travers un répertoire et l'écho de son contenu, et je veux exclure le ".." et "." des dossiers.PHP! = Et == opérateurs

Maintenant, ce code fonctionne:

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

Mais cela ne ...

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

Pour des raisons évidentes, le deuxième morceau de code est plus ce que je veux, parce que je déteste vraiment avoir la vraie déclaration ne fait rien.

+2

Vous avez vraiment besoin de choisir une réponse acceptée à vos questions. –

Répondre

22

Si vous annulez une condition constituée de deux conditions uniques et d'une conjonction ("et" ou "ou"), vous devez annuler chaque condition séparément et utiliser l'autre conjonction.

Donc, essayez ceci:

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

Excellent, bonne explication. –

+5

+1 yay pour la loi de DeMorgan! http://en.wikipedia.org/wiki/De_Morgan%27s_laws –

+0

Ahem ... vous pouvez évidemment accepter ceci;) – Franz

4

Ils ne sont pas opposés ...

Check out de Morgan's laws.

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

devrait être

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

Ce:

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

devrait être:

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

Vous devez annuler l'expression entière, tout comme -(-x + 2) en mathématiques nie tout:

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

est-ce pas la négation de

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

Parce que vous n'avez pas annulé l'OR. Le contraire de OU est ET, ce qui a:

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

$file != ".." valeur TRUE. Au lieu de cela, il suffit d'utiliser un opérateur AND:

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

Cependant, j'utiliser à la place DirectoryIterator:

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