Anonym: If PHP

Und wieder nervt euch der PHP-Anfänger (Ich bin aber schon fleisig am lernen!)

Naja eine Frage zu if else.

Wenn ich if habe
also
``
}

(Nur als Beispiel)
wie ordne ich $x mehrere Werte bei if zu. Oder muss ich für jeden Wert ein If schreiben.
Ich meine sowas in der Art (Was nicht geht natürlich)

  
if ($x==3,4,5,6,7,8)  
{  
echo "Hallo";  
}  

  1. Ich Rindvieh.
    Mit or gings!

    1. Nee, doch nicht wirklich

      1. Doch es geht,

        aber man muss ja immer die Bedingung erneut ausschreiben...

        Naja was soll's

        Erst denken, dann posten...

        1. Bei vielen gültigen, die keiner anderen Regel entsprechen könnte auch funktionieren:

            
          $valid = array(3,4,5,7,8,99);  
          if (in_array($x,$valid)){  
            echo "Hallo";  
          }
          

          Cheers,
          Baba

        2. Hello,

          Doch es geht,

          aber man muss ja immer die Bedingung erneut ausschreiben...

          Dann nimm doch switch ... case ... default
          http://de3.php.net/manual/en/control-structures.switch.php

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. aber man muss ja immer die Bedingung erneut ausschreiben...

            Dann nimm doch switch ... case ... default
            http://de3.php.net/manual/en/control-structures.switch.php

            Das sind wohl zwei verschiedene Dinge. Er will nicht auf verschiedene Werte von x verschieden reagieren, sondern auf verschiedene Werte von x gleich reagieren.

            Er meinte wohl mit erneut ausschreiben
            if(($x==4) or ($x==2)) statt if(($x==3 or 4 or 5)), nehme ich an.

            Cheers,
            Baba

            1. [latex]Mae  govannen![/latex]

              aber man muss ja immer die Bedingung erneut ausschreiben...

              Dann nimm doch switch ... case ... default
              http://de3.php.net/manual/en/control-structures.switch.php

              Das sind wohl zwei verschiedene Dinge. Er will nicht auf verschiedene Werte von x verschieden reagieren, sondern auf verschiedene Werte von x gleich reagieren.

              switch ($x) {
              case 4:
              case 2:
              case 27:
                 foo();
                 bar();
              }

              Sonderlich schön ist's aber auch nicht.

              (Auszeichnung als Code bekomme ich aus technischen Gründen nicht hin)

              Stur lächeln und winken, Männer!
              Kai

              --
              It all began when I went on a tour, hoping to find some furniture
               Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
              SelfHTML-Forum-Stylesheet
              1. Om nah hoo pez nyeetz, Kai345!

                (Auszeichnung als Code bekomme ich aus technischen Gründen nicht hin)

                 switch ($x) {  
                 case 4:  
                 case 2:  
                 case 27:  
                    foo();  
                    bar();  
                 }
                

                Immer noch? Woran lags/liegts?

                Matthias

                --
                1/z ist kein Blatt Papier.

                1. [latex]Mae  govannen![/latex]

                  (Auszeichnung als Code bekomme ich aus technischen Gründen nicht hin)

                  Immer noch? Woran lags/liegts?

                  Ich bin total verblödet. Ich hätte die Tags einfach per Hand schreiben können :( code lang=php /code mit den eckigen Klammern drumherum wäre für ein weniger vermatschtes Hirn sicherlich keine Aufgabe gewesen.

                  Hinderungsgrund war jedenfalls, daß ich auf meinem alten Schlepptopf einen Mausfall *g* hatte und irgendwie mit dem Tatschpätt *g2* und den beiden Maus-Ersatz-Buttons nichts selektiert bekam bzw. sobald ich den Button losließ die Selektion wieder weg war. Ich bin ohne Nager wohl hilflos

                  Stur lächeln und winken, Männer!
                  Kai

                  --
                  It all began when I went on a tour, hoping to find some furniture
                   Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
                  SelfHTML-Forum-Stylesheet
                  1. Om nah hoo pez nyeetz, Kai345!

                    Ich hätte die Tags einfach per Hand schreiben können :( code lang=php /code mit den eckigen Klammern drumherum wäre für ein weniger vermatschtes Hirn sicherlich keine Aufgabe gewesen.

                    oder den PHP-Button anklicken, das ergibt [code lang=php][/code], und dann zwischen die Tags schreiben. ;-)

                    Matthias

                    --
                    1/z ist kein Blatt Papier.

  2. hi,

    soweit die zahlen in einer reihe sind, die immer +1 ist geht das auch so:

      
    if ($x >= 3 AND $x <= 9) {  
    echo "x ist zwischen 3 und 9";  
    }  
    
    

    Achtung, dabei würden jetzte Kommawerte (3.5) funktionieren!
    Nur so als Denkanregung einfach =)

    Gruß Niklas

    --
    Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
    1. gudn tach!

      soweit die zahlen in einer reihe sind, die immer +1 ist geht das auch so:

      if ($x >= 3 AND $x <= 9) {
      echo "x ist zwischen 3 und 9";
      }

      
      >   
      > Achtung, dabei würden jetzte Kommawerte (3.5) funktionieren!  
        
      deswegen in so einem fall besser mit range arbeiten:  
      ~~~php
        
      if(in_array($x, range(3, 9))){  
        echo "x ist eine ganzzahl >=3 und <=9";  
      }  
      
      
      1. Hallo,

        in_array($x, range(3, 9))

        Oh Gott, diese Benennungen in PHP, es ist so unglaublich schlimm! Wie soll man bitte darauf kommen dass range() ein Array ausspuckt? Ich hätte ehrlich gesagt angenommen es spuckt was vom Typen "Range" aus, wie bei Ruby:

        (1..10).include? 2  # -> true  
        (1..10).include? 22  # -> false
        

        bzw. hier die Implementation in Java:

        package types;  
        import java.util.Iterator;  
          
        public class Range<T extends Comparable> {  
          
            private T from = null;  
            private T to = null;  
          
            public Range( T start, T end ){  
                this.from = start;  
                this.to = end;  
            }  
          
            public boolean contains( T value ) {  
                return from.compareTo( value ) <= 0 && to.compareTo( value ) >= 0;  
            }  
        }  
          
        Range r = new Range(new Date(2009, 1,1), new Date(2012, 12, 31));  
        System.out.println(r.contains(new Date(2010, 1,1)));  
        // true  
        
        

        Jeena

        1. Hallo,

          in_array($x, range(3, 9))
          Oh Gott, diese Benennungen in PHP, es ist so unglaublich schlimm! Wie soll man bitte darauf kommen dass range() ein Array ausspuckt?

          Weil es so im Handbuch steht?

          1. Hallo,

            Weil es so im Handbuch steht?

            Das ist nicht dein Ernst oder? Mit diesem Argument könnte man Brainfuck als tolle Alltagssprache darstellen.

            Jeena

        2. Tach!

          in_array($x, range(3, 9))
          Oh Gott, diese Benennungen in PHP, es ist so unglaublich schlimm! Wie soll man bitte darauf kommen dass range() ein Array ausspuckt? Ich hätte ehrlich gesagt angenommen es spuckt was vom Typen "Range" aus, wie bei Ruby:

          Auch Python erzeugt mit range() ein Array (genauer: eine Liste). Bei C# heißt es auch so. Vielleicht tanzt in dem Fall Ruby aus der Reihe?

          dedlfix.

          1. Hallo,

            Auch Python erzeugt mit range() ein Array (genauer: eine Liste). Bei C# heißt es auch so. Vielleicht tanzt in dem Fall Ruby aus der Reihe?

            So weit ich weiß gibt C#'s Range einfach ein IEnumerable<T> zurück welches wiederum eine Methode ToArray() hat, die natürlich völlig akzeptabel ist.

            Enumerable.Range(0, 15).ToArray();

            Aber damit wird man kaum arbeiten, außer man braucht wirklich ein Array von Integern, sehr oft kommt es ja vor dass man ein Range von Datum hat oder Fließkommazahlen oder was auch immer.

            Und Python war mir schon immer suspekt, genau wegen solcher Sachen. Aber ja, ich bin gegenüber PHP wohl auch ziemlich voreingenommen weil es die ganze Zeit Objektorientierung und dieses "in Funktionen Denken" von C so fröhlich miteinander vermischt dass ich nie weiß wann welches passiert. Das gleiche gilt übrigens auch für Python.

            Jeena

          2. Auch Python erzeugt mit range() ein Array (genauer: eine Liste).

            range() hat in Python 2.x immer den Begleiter xrange(), welches ein xrange Objekt, sprich einen leichtgewichtigen Iterator zurück gibt. Mit Python 3.x wurde range() durch xrange() ersetzt.

        3. gudn tach!

          in_array($x, range(3, 9))
          Oh Gott, diese Benennungen in PHP, es ist so unglaublich schlimm!

          grundsaetzlich stimme ich dir zu, aber in diesem fall finde ich es gar nicht so abwegig. ich hatte es auch selbst nicht auswendig gewusst, sondern hab einfach im manual nach in_range gesucht (weil ich es offenbar falsch in erinerung hatte) und bin so von der internen suchmachine auf die beiden richtigen funktionen "in_array" und "range" hingewiesen worden. ich mag php auch nicht besonders und finde das manual nicht sehr gut, aber in diesem fall hat das manual (fuer mich) perfekt funktioniert.

          Wie soll man bitte darauf kommen dass range() ein Array ausspuckt?

          "range" bedeutet u.a. "intervall" und hier moechte man ja ein (diskretes) intervall haben, also in php ein array.

          (1..10).include? 2  # -> true

          (1..10).include? 22  # -> false

            
          nicht schlecht. fast so schoen wie in perl:  
            
          ~~~perl
            
            2 ~~ [1..10];  # true  
            22 ~~ [1..10]; # false  
          
          

          prost
          seth

          1. Hallo,

            nicht schlecht. fast so schoen wie in perl:

            2 ~~ [1..10];  # true
              22 ~~ [1..10]; # false

              
            Ich möchte fast sagen schöner weil ~~ aussieht wie -- und ich es nicht mit "includes" oder "contains" oder ähnlichem in Verbindung setzen würde.  
              
               Jeena  
            ![](http://jeenaparadies.net/pavatar.png)
            
            -- 
            [Jlog](http://jeenaparadies.net/webdesign/jlog/) | [Gourmetica Mentiri](http://jeenaparadies.net/gourmetica-mentiri/)
            
            1. gudn tach!

              nicht schlecht. fast so schoen wie in perl:

              2 ~~ [1..10]; # true
                22 ~~ [1..10]; # false

              Ich möchte fast sagen schöner

              ;-)
              da bist du sicher nicht der einzige.

              weil ~~ aussieht wie -- und ich es nicht mit "includes" oder "contains" oder ähnlichem in Verbindung setzen würde.

              ja, ~~ ist so ein bissl ein universal-operator und heisst deswegen auch allgemein "smartmatch operator", der kann noch viel mehr kann als nur sagen, ob ein skalar in einem array vorkommt, man kann ihn auf z.b. ohne syntaxaenderung mit regulaeren ausdruecken statt skalaren oder mit hashes statt arrays benutzen. er verkoerpert so ein bissl das gegenteil der phython-maxime "explicit is better than implicit".

              wie so oft, ist die syntax extrem kurz und deswegen nicht mehr so gut fuer nicht-perl-programmierer lesbar.

              prost
              seth

          2. 2 ~~ [1..10];  # true
              22 ~~ [1..10]; # false

              
            Sollte ich mal eine Sprache erfinden, wird sie Operatoren wie »@>--}---« und »<\*)))><« besitzen, damit jeder weiß, was gemeint ist.  
              
            Mathias
            
            -- 
            [Chaplin - An Application Architecture Using Backbone.js](https://github.com/chaplinjs/chaplin)
            
            1. Moin molily,

              2 ~~ [1..10];  # true
                22 ~~ [1..10]; # false

              
              >   
              > Sollte ich mal eine Sprache erfinden, wird sie Operatoren wie »@>--}---« und »<\*)))><« besitzen, damit jeder weiß, was gemeint ist.  
                
              Das hier ist gültiges Perl 6:  
                
              multi sub infix:«<\*)))><»(Int $x, Int $y) {  
                return $x \* $y;  
              }  
              say 10 <\*)))>< 10;  
                
              LG,  
               CK  
              
              -- 
              <http://ck.kennt-wayne.de/>  
              
              
              1. say 10 <*)))>< 10;

                Noooooooooooooo

                1. gudn tach!

                  say 10 <*)))>< 10;

                  Noooooooooooooo

                  eher so.

                  prost
                  seth

                  1. Moin seth,

                    eher so.

                    Haha, made my day ;D Danke!

                    LG,
                     CK

              2. gudn tach!

                Das hier ist gültiges Perl 6:

                multi sub infix:«<*)))><»(Int $x, Int $y) {
                  return $x * $y;
                }
                say 10 <*)))>< 10;

                boah, perl 6 wird so geil! :-)

                als mini-ergaenzung: es gibt in perl sogar einen goatse-operator, siehe z.b.
                http://www.catonmat.net/blog/secret-perl-operators/ (ist keine shock-seite).

                prost
                seth

                1. Moin seth,

                  boah, perl 6 wird so geil! :-)

                  Vor allem so extrem coole Features wie junctions (mit dem man das Problem des OPs gut hätte lösen können, btw :-), parameter constraints und grammars lassen mir das Wasser im Munde zusammenlaufen :)

                  LG,
                   CK

            2. Hallo,

              Sollte ich mal eine Sprache erfinden, wird sie Operatoren wie »@>--}---« und »<*)))><« besitzen, damit jeder weiß, was gemeint ist.

              Das sieht mir verdächtig danach aus dass du dir hier geistiges Eigentum zu eigen machen möchtest, denn es sieht Brainfuck schon verdammt ähnlich.

              Jeena

              1. Moin Jeena,

                Sollte ich mal eine Sprache erfinden, wird sie Operatoren wie »@>--}---« und »<*)))><« besitzen, damit jeder weiß, was gemeint ist.
                Das sieht mir verdächtig danach aus dass du dir hier geistiges Eigentum zu eigen machen möchtest, denn es sieht Brainfuck schon verdammt ähnlich.

                Du mit deiner Kindergarten-Sprache. Echte Programmierer schreiben natürlich Malbolge!

                LG,
                 CK

                1. Hallo,

                  Du mit deiner Kindergarten-Sprache. Echte Programmierer schreiben natürlich Malbolge!

                  Das sicherlich aber Mollily hat offensichtlich da nicht abgeschaut weil er ein Feigling ist.

                  Jeena

            3. gudn tach!

              2 ~~ [1..10]; # true
                22 ~~ [1..10]; # false

              Sollte ich mal eine Sprache erfinden, wird sie Operatoren wie »@>--}---« und »<*)))><« besitzen, damit jeder weiß, was gemeint ist.

              du musst nur ganz genau hinschauen, da steht "2 in [1..10];" schau ganz genau hin. "2 in [1..10];" zaehle langsam bis 3. schau ganz genau hin. "2 in [1..10];" wenn's du's immer noch nicht siehst, dann musst du bloss das perl-manual lesen und noch mal lange genug hinschauen, bis es klick macht.

              danach willst du auch nie wieder preg_matchblabla, preg_replacepupsdreck, oder \\\\\ schreiben, sondern nur noch =~.

              prost
              seth

              ps: ja, ein "in" (also "$a in @b") wenigstens als alias waere eigentlich huebsch gewesen.