jens65m: IF-Konstrukt kürzen

  
$schleifen_aktiv = "1";  
  
if($schleife_aktiv == "1")  
{  
	if(//bedingung)  
	{  
		//Anweisungen  
	}  
}  
  
else  
{  
	//Anweisungen  
}  
  

Mit $schleife_aktiv wird angegeben ob die zweite IF-Schleife aktiv ist oder nicht. Dann werden die Anweisungen ausgeführt. Ist das Zweite IF deaktiviert sollen die gleichen Anweisungen ausgeführt werden.

Wie kann ich das kürzen?
Lg

  1. Hello,

    $schleifen_aktiv = "1";

    if($schleife_aktiv == "1")

    Erst einmal solltest Du exakter werden.

    '$schleifen_aktiv' ist eine andere Variable als '$schleife_aktiv'.

    Außerdem ist 'if then else' oder bei PHP 'if else' keine Schleife, sondern eine sequentielle Enscheidungsstruktur. Sie wird nur einmal durchlaufen, es sewi denn, man baut ein zusäzliches Schleifenkonstrukt darum herum.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. ok sorry

        
      $aktiv = "1";  
        
      if($aktiv == "1")  
      {  
              if(//bedingung)  
              {  
                      //Anweisungen  
              }  
      }  
        
      else  
      {  
              //Anweisungen  
      }  
        
      
      

      Jetzt steht da zweimal //Anweisungen, dh. die Anweisungen die da dann hinkommen sind exakt gleich.
      Kann man das nicht kürzer schreiben?
      lG

      1. Hello,

        $aktiv = "1";

        if($aktiv == "1")
        {
                if(//bedingung)
                {
                        //Anweisungen
                }
        }

        else
        {
                //Anweisungen
        }

        
        >   
        > Jetzt steht da zweimal //Anweisungen, dh. die Anweisungen die da dann hinkommen sind exakt gleich.  
        > Kann man das nicht kürzer schreiben?  
          
          
        Ja, das äußere IF kann vollkommen entfallen.  
          
          
        if (... bedingung ...)  
        {  
           ### ... Anweisungen  
        }  
          
        führt zum gleichen Ergebnis.  
          
          
          
          
          
        Liebe Grüße aus dem schönen Oberharz  
          
          
        Tom vom Berg  
        ![](http://selfhtml.bitworks.de/Virencheck.gif)  
          
        
        -- 
         ☻\_  
        /▌  
        / \ Nur selber lernen macht schlau  
        <http://bergpost.annerschbarrich.de>
        
        1. Hello,

          führt zum gleichen Ergebnis.

          Ach, das stimmt natürlich nicht...

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. wie kann denn das stimmen

            if($aktiv == "1")  
            {  
                    $var = $_GET['var']; //mit Absicht nicht geprüft  
              
                    if($var = "test")  
                    {  
                            //Anweisungen  
                    }  
            }  
              
            else  
            {  
                    //Anweisungen  
            }
            

            Wenn du mal genau hinsiehst merkst du, dass $var nur gesetzt wird wenn $aktiv == 1 ist. Andernfalls werden zwar die Anweisungen ausgeführt, die Variable wird aber nicht gesetzt.

            1. quasi so:

              if($aktiv == "1")  
              {  
                      $var = $_GET['var']; //mit Absicht nicht geprüft  
                
                      if($var = "test")  
                      {  
                              goto test;  
                      }  
              }  
                
              else goto test;  
                
                
              test:  
              //Anweisungen  
              
              

              Aber goto ist nunmal eher selten benutzt. Außerdem erst ab 5.3 kompatible.
              lg

              1. hat sich erledigt. danke

                1. hat sich erledigt. danke

                  Verwende Funtionen statt goto(hell)!

                  mfg Beat

                  --
                  ><o(((°>           ><o(((°>
                     <°)))o><                     ><o(((°>o
                  Der Valigator leibt diese Fische
                2. @@jens65m:

                  nuqneH

                  hat sich erledigt.

                  Hm, und wie? Hoffentlich nicht mit Steels mangelhafter Lösung.

                  Qapla'

                  --
                  Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                  (Mark Twain)
                  1. Hallo,

                    hat sich erledigt.
                    Hm, und wie? Hoffentlich nicht mit Steels mangelhafter Lösung.

                    ... die trotzdem schon 2 "fachlich hilfreich" bekommen hat. Das verstehe wer will.

                    Ciao,
                     Martin

                    --
                    Es gibt Dinge, die sind sooo falsch, dass nicht einmal das Gegenteil stimmt.
                    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                    1. @@Der Martin:

                      nuqneH

                      ... die trotzdem schon 2 "fachlich hilfreich" bekommen hat. Das verstehe wer will.

                      Bewertungs-Funktion considered unsinnig.

                      Qapla'

                      --
                      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                      (Mark Twain)
                  2. @@jens65m:

                    nuqneH

                    hat sich erledigt.

                    Hm, und wie? Hoffentlich nicht mit Steels mangelhafter Lösung.

                    Hab ich was falsch verstanden? Ich war der Meinung das hier waere gewollt:
                    wert:true bedingung:false
                    Do nothing.

                    wert:true bedingung:true
                    Do it Baby!

                    wert:false bedingung:false
                    Do it Baby!

                    wert:false bedingung:true
                    Do it Baby!

                    --
                    Vergesst Chuck Norris.
                    Sponge Bob kann unter Wasser grillen!
                    1. @@Steel:

                      nuqneH

                      Hab ich was falsch verstanden?

                      Du hattest durchgehen lassen, dass anstelle eines booleschen Wertes ein String verwendet wird.

                      Qapla'

                      --
                      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                      (Mark Twain)
                      1. @@Steel:

                        nuqneH

                        Hab ich was falsch verstanden?

                        Du hattest durchgehen lassen, dass anstelle eines booleschen Wertes ein String verwendet wird.

                        Auch da hab ich mich schlicht an die Vorgaben gehalten. Wer sagt denn, dass in dieser Variable nicht wirklich "Pizza" steht? Schoen uebergeben von einem Formular. Vielleicht steht da ja auch "Dildo" und dem OP wars zu peinlich.

                        Die Logik aendert sich ja nicht.

                        --
                        Vergesst Chuck Norris.
                        Sponge Bob kann unter Wasser grillen!
                    2. Hallo,

                      Hoffentlich nicht mit Steels mangelhafter Lösung.
                      Hab ich was falsch verstanden?

                      schon möglich. Ich gehe nämlich davon aus, dass das Beispiel von jens65m stark eingekürzt ist, sonst würden dir verschachtelten if-Statements ja keinen Sinn ergeben bzw. wären trivial. Dann wäre deine Lösung auch völlig okay.

                      Ich war der Meinung das hier waere gewollt:
                      wert:true bedingung:false
                      Do nothing.

                      wert:true bedingung:true
                      Do it Baby!

                      wert:false bedingung:false
                      Do it Baby!

                      wert:false bedingung:true
                      Do it Baby!

                      Ich gehe eher davon aus, dass da in Wirklichkeit ungefähr diese Struktur vorliegt:

                      if (A)  
                       { Block1();  
                         if (B)  
                          { Block2();  
                          }  
                         Block3();  
                       }  
                      else  
                       { Block2();  
                       }
                      

                      Wenn Bedingung A zutrifft, wird Block2() also von Block1() und Block3() eingerahmt, falls er überhaupt ausgeführt wird.
                      Ohne Block1() und Block3() kann man tatsächlich die beiden Bedingungen mit ein wenig Boolscher Algebra zusammenfassen, so wie du es getan hast. Das kommt mir aber so trivial vor, dass ich mir nicht vorstellen kann, dass der OP das wissen wollte.

                      Davon abgesehen hatte ich befürchtet, dass du dich mit der Operator-Rangfolge verzettelt hast, denn das ausgeschriebene 'or' hat eine andere Rangstufe als das Symbol ||. Im Verhältnis zu einem Vergleichsoperator haben sie aber beide eine niedrigere Priorität.

                      So long,
                       Martin

                      --
                      Wenn die Amerikaner eines Tages von jeder Tierart ein Pärchen nach Cape Canaveral treiben ...
                      ja, DANN sollte man endlich misstrauisch werden.
                      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                      1. Hi!

                        Ich gehe eher davon aus, dass da in Wirklichkeit ungefähr diese Struktur vorliegt:

                        if (A)

                        { Block1();
                           if (B)
                            { Block2();
                            }
                           Block3();
                        }
                        else
                        { Block2();
                        }

                          
                        Kurz drueber nachgedacht hatte ich auch. Hab dann aber bewusst so interpretiert, dass das gezeigte Konstrukt nur wenig reduziert war. Spaetere Posts des OP lassen ja auch auf eine gewisse Trivialitaet des Problems schliessen. Scheinbar haette den OP ja schon eine Funktion oder Loesung mit goto (o.O') gluecklich gemacht.  
                          
                        Die ueblichen Probleme mit Problembeschreibungen halt. Ich hab hier schon dampfende Wuerfel liegen, weil ich nie weiss, was die Fragesteller nun meinen.  
                          
                        - Ja. Ich hab hier wirklich diverse Wuerfel, aber die dampfen natuerlich nicht und dienen primaer der Ermittlung desjenigen der beim Pizzabringdienst anruft. :)  
                        
                        -- 
                        Vergesst Chuck Norris.  
                        Sponge Bob kann unter Wasser grillen!
                        
            2. Hi!

              if($aktiv == "1")
              {
                      $var = $_GET['var']; //mit Absicht nicht geprüft

              Was soll denn diese Umkopiererei?

              if($var = "test")

              Das ist hoffentlich nur ein Tippfehler und soll wohl ein == sein.

              Wenn du mal genau hinsiehst merkst du, dass $var nur gesetzt wird wenn $aktiv == 1 ist.

              Mit gesetzten oder nicht gesetzten Variablen als Entscheidungskriterium zu arbeiten, ist im Allgemeinen nicht besonders sinnvoll, wenn es sich nicht gerade im solche handelt, auf die men selbst keinen Einfluss hat, also $_GET/$_POST/etc.-Inhalte.

              In deinem Fall ist es so, dass du mit $aktiv schon ein Entscheidungskriterium für eine bedingte Auswertung von $_GET['var'] hast, da brauchst du nicht noch ein gesetztes oder nicht gesetztes $var.

              Auch meine Empfehlung lautet, die Bedingungen zu verknüpfen. Im Zweifelsfall helfen Wahrheitstabellen, wie sie Gunnar gezeigt hat.

              Lo!

      2. so nochmal genauer:

        $aktiv = "1";  
          
        if($aktiv == "1")  
        {  
                $var = $_GET['var']; //mit Absicht nicht geprüft  
          
                if($var = "test")  
                {  
                        //Anweisungen  
                }  
        }  
          
        else  
        {  
                //Anweisungen  
        }
        
        1. Moin allerseits,

          so nochmal genauer:

          $aktiv = "1";

          if($aktiv == "1")
          {
                  $var = $_GET['var']; //mit Absicht nicht geprüft

          if($var = "test")
                  {
                          //Anweisungen
                  }
          }

          else
          {
                  //Anweisungen
          }

          Also, wenn beide Male die exakt gleichen Anweisungen ausgeführt werden, dann kannst du das so schreiben:  
            
          ~~~php
            
          $aktiv = true;  
            
          if(!$aktiv || ($aktiv && $_GET['var']=='test'))  
          {  
          //    Anweisungen  
          }  
            
          
          

          Mit !$aktiv hättest du deinen else-Part abgedeckt, mit ($aktiv && $_GET['var']=='test') den if-Part.

          Grüße, JN

          --
          ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
          http://www.johny7.de
          1. @@johny7:

            nuqneH

            if(!$aktiv || ($aktiv && $_GET['var']=='test'))

            ▲▲▲▲▲▲▲▲▲
            Das ist völlig überflüssig.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. [latex]Mae  govannen![/latex]

              if(!$aktiv || ($aktiv && $_GET['var']=='test'))
                                ▲▲▲▲▲▲▲▲▲
              Das ist völlig überflüssig.

              Nein, nicht so wie es da steht. Wenn gewünscht ist, daß die Bedingung nur erfüllt werden soll, wenn

              • aktiv false ergibt
              • aktiv true ergibt _und_ $_GET['var'] 'test' sein muß,

              (und genau so lese ich das Beispiel), dann ist es nicht überflüssig.

              Läßt man es weg, ergibt sich ein ganz andere Logik. Wenn $aktiv true, aber $_GET['var'] nicht 'test' ist soll offenbar der Block nicht ausgeführt werden.

              Cü,

              Kai

              --
              ~~~ ken SENT ME ~~~
              Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
              in Richtung "Mess up the Web".(suit)
              SelfHTML-Forum-Stylesheet
              1. @@Kai345:

                nuqneH

                if(!$aktiv || ($aktiv && $_GET['var']=='test'))
                                  ▲▲▲▲▲▲▲▲▲
                Das ist völlig überflüssig.

                Nein, nicht so wie es da steht. […] Läßt man es weg, ergibt sich ein ganz andere Logik.

                Bist du *sicher*?

                a │ b ║ ¬a │ ¬a ∨ b │ a ∧ b │ ¬a ∨ (a ∧ b)
                ───┼───╫────┼────────┼───────┼──────────────
                 1 │ 1 ║  0 │    1   │   1   │    1
                 1 │ 0 ║  0 │    0   │   0   │    0
                 0 │ 1 ║  1 │    1   │   0   │    1
                 0 │ 0 ║  1 │    1   │   0   │    1

                Vergleiche ¬a ∨ b mit ¬a ∨ (a ∧ b)!

                Oder einfach formal durchgerechnet: ¬a ∨ (a ∧ b) = (¬a ∨ a) ∧ (¬a ∨ b) = 1 ∧ (¬a ∨ b) = ¬a ∨ b.

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
                1. Tach auch.

                  Oder einfach formal durchgerechnet: ¬a ∨ (a ∧ b) = (¬a ∨ a) ∧ (¬a ∨ b) = 1 ∧ (¬a ∨ b) = ¬a ∨ b.

                  Der Vollständigkeit halber ergänze ich mal die benutzten Gesetze, damit das wirklich jeder versteht:
                  Schritt 1: Distributivgesetz
                  Schritt 2: Komplementärgesetz
                  Schritt 3: Neutralitätsgesetz

                  nachzulesen etwa bei Wikipedia.

                  Bis die Tage,
                  Matti

  2. Moin!

    Wie kann ich das kürzen?

    $schleife_aktiv = "1";

    if($schleife_aktiv != "1" OR bedingung)
    {
      //Anweisungen
    }

    ??

    --
    Vergesst Chuck Norris.
    Sponge Bob kann unter Wasser grillen!
  3. @@jens65m:

    nuqneH

    $schleifen_aktiv = "1";

    if($schleife_aktiv == "1")

    Sollte das dieselbe Variable sein? Und warum ein Integer und kein boolscher Wert?

    Mit $schleife_aktiv wird angegeben ob die zweite IF-Schleife aktiv ist oder nicht.

    Weder noch. Es gibt sie nicht, die IF-Schleife.

    Ist das Zweite IF deaktiviert

    ?? Deaktiviert?

    Wie kann ich das kürzen?

    $schleife_aktiv │ bedingung ║ Anweisungen werden ausgeführt
    ────────────────┼───────────╫──────────────────────────────
    true            │ true      ║ true
    true            │ false     ║ false
    false           │ true      ║ true
    false           │ false     ║ true

    Na, wie muss man $schleife_aktiv und bedingung oder ihre Negationen verunden oder verodern, damit das Gewünschte herauskommt?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Hallo,

      $schleifen_aktiv = "1";
      if($schleife_aktiv == "1")
      Sollte das dieselbe Variable sein?

      angeblich ja.

      Und warum ein Integer und kein boolscher Wert?

      Es ist kein Integer. Es ist ein String, und das verstehe ich noch weniger.

      Ciao,
       Martin

      --
      Elefant zum Kamel: "Sag mal, wieso hast du denn den Busen auf dem Rücken?"
      Kamel:             "Ziemlich freche Frage für einen, der den Penis im Gesicht hat."
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. @@Der Martin:

        nuqneH

        Es ist kein Integer. Es ist ein String,

        Autsch, ja. Noch schlimmer.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
    2. $schleifen_aktiv = "1";

      if($schleife_aktiv == "1")

      Sollte das dieselbe Variable sein? Und warum ein Integer und kein boolscher Wert?

      Integer? Die sind ohne weiteres zutun ziemlich sicher vom Typ String :)

  4. Mit $schleife_aktiv wird angegeben ob die zweite IF-Schleife aktiv ist oder nicht. Dann werden die Anweisungen ausgeführt. Ist das Zweite IF deaktiviert sollen die gleichen Anweisungen ausgeführt werden.

    Wie kann ich das kürzen?

    Wie lagert man wiederkehrenden Code aus?
    Mit Funktionen!

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. @@Beat:

      nuqneH

      Wie lagert man wiederkehrenden Code aus?
      Mit Funktionen!

      Hier geht es aber ums Zusammenfassen von Bedingungen, nicht ums Auslagern von Code in Funktionen.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Wie lagert man wiederkehrenden Code aus?
        Mit Funktionen!

        Hier geht es aber ums Zusammenfassen von Bedingungen, nicht ums Auslagern von Code in Funktionen.

        Hier geht es um was auch immer. Bei der Ausdrucksweise ist die Verwirrung hier ja verständlich.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische