zsoerenm: If mit mehreren Bedingen.

Hallo

ich hab ein Problem die Oder funktion in der If-Bedingung scheint nicht richtig zu klappen.

  
<?php  
  
  $dirhandle = opendir(".");  
  $zaehler = 0;  
  while($eintrag = readdir($dirhandle))  
  {  
    $f_wort1 = ".";  
    $f_wort2 = "..";  
    $f_wort3 = "Thumbs.db";  
    IF ($eintrag != $f_wort1 || $eintrag != $f_wort2 || $eintrag != $f_wort3)  
    {  
      $zaehler++;  
      $bild[$zaehler] = $eintrag;  
    }  
  }  
  echo "$bild[3]<br>\n";  
  $zaehler =$zaehler -2;  
  echo "$zaehler";  
  closedir($dirhandle);  
  
?>  

So wie es jetzt ist wird die IF-Bedinung einfach übergangen und nur das was in der Bedinung steht wird ausgeführt. Wenn ich nur eine IF-Bedingung benutze wird diese erfolgreich ausgeführt.

Was mach ich falsch?

Gruß Sören

  1. Hallo zsoerenm.

    ich hab ein Problem die Oder funktion in der If-Bedingung scheint nicht richtig zu klappen.

    Dann spiele doch einmal die möglichen Fälle durch. Angenommen, wir haben ein Verzeichnis mit folgenden Dateien:

    .
    ..
    foo.png
    Thumbs.db

    ~~~php

    $f_wort1 = ".";

    $f_wort2 = "..";
        $f_wort3 = "Thumbs.db";
        IF ($eintrag != $f_wort1 || $eintrag != $f_wort2 || $eintrag != $f_wort3)

      
      Fall 1, „.“: die erste Bedingung trifft nicht zu, die zweite dagegen schon; $zaehler wird erhöht.  
      
      Fall 2, „..“: die erste Bedingung trifft zu, $zaehler wird erhöht.  
      
      Fall 3, „foo.png“: die erste Bedingung trifft zu, $zaehler wird erhöht.  
      
      Fall 4, „Thumbs.db“: die erste Bedingung trifft zu $zaehler wird erhöht.  
      
    Wie du siehst, wird der $zaehler immer erhöht, egal was du gerade in $eintrag stehen hast. Du möchtest also alle „||“ durch „&&“ erhöhen, womit du ausschließt, dass $eintrag gleich „.“, „..“ und „Thumbs.db“ sein kann.  
      
      
    Einen schönen Dienstag noch.  
      
    Gruß, Mathias  
    
    -- 
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)  
      
    debian/rules
    
  2. Hallo Sören,

    Mathias hat dir ja schon erklärt, was du falsch gemacht hast. Ich würde das Problem allerdings von Anfang an ein bisschen anders angehen:

    <?php

    ..

    // Außerhalb des Schleifenrumpfs, damit die Zuweisung nicht bei jedem
         // Schleifendurchlauf wiederholt wird
         $woerter = array('.', '..', 'Thumbs.db');

    while($eintrag = readdir($dirhandle))
      {

    if (![link:http://www.php.net/in-array@title=in_array]($eintrag, $woerter)) {

    $zaehler++;
          $bild[$zaehler] = $eintrag;
        }
      }
      ...
    ?>

      
    Ach ja, $woerter ist kein sehr aussagekräftiger Variablenname für so einen Fall, aber es ist ja wohl nur ein Beispiel ;-)  
      
    Schöne Grüße,  
      
    Johannes
    
    1. *Seufz* ich glaube, ich sollte ins Bett gehen ;-)

      Nachtrag:

      $zaehler++;
            $bild[$zaehler] = $eintrag;

      Die Zaehlervariable kannst du in diesem Fall weglassen.

      $bild[] = $eintrag;

      fügt den entsprechenden Eintrag immer ans Ende des Arrays hinzu.

      Schöne Grüße,

      Johannes

  3. Hi,

    wenn ich den Sinn des Skriptes richtig verstehe brauchst Du hier auch AND, nicht OR:
    if ($eintrag != $f_wort1 && $eintrag != $f_wort2 && $eintrag != $f_wort3) ...