Weber: If Abfrage mit mehren ODER vereinfachen?

Hallo,

ich möchte gerne eine IF Abfrage vereinfachen

bisher:

if ($sonne == "12" or $sonne == "45" or $sonne == "126" ...

gibt es da nicht eine einfachere Lösung für

  
if ($sonne == "12,45,126...." 

oder so ähnlich?

  1. Hallöchen auch,

    if ($sonne == "12" or $sonne == "45" or $sonne == "126" ...

    gibt es da nicht eine einfachere Lösung für

    Die einzige Vereinfachung, die ich kenne, wäre:
    if ($sonne == "12" || $sonne == "45" || $sonne == "126" ...

    MfG
    cross

    1. 'ǝɯɐu$ ıɥ

      if ($sonne == "12" or $sonne == "45" or $sonne == "126" ...

      gibt es da nicht eine einfachere Lösung für

      Die einzige Vereinfachung, die ich kenne, wäre:
      if ($sonne == "12" || $sonne == "45" || $sonne == "126" ...

      OR != ||

      ssnɹƃ
      ʍopɐɥs

      --
      Want to know your I.Q.? Dial 1-900-I AM STUPID.
      1. Hallöchen auch,

        OR != ||

        Ja, aber lediglich in der Rangfolge.

        MfG
        cross

  2. Hallihallo!

    Ich würde schreiben:

      
    $erwartet = array(12,45,126);  
    if (in_array($sonne, $erwartet)) {  
       // ...  
    }  
    
    

    Es ginge auch kürzer mit

      
    if (in_array($sonne,array(12,45,126))) {  
       // ...  
    }  
    
    ~~~,  
    aber die erste Variante ist meiner Meinung nach besser lesbar.  
      
    Beste Grüsse,  
        Tobias Hahner  
    
    
    1. [latex]Mae  govannen![/latex]

      Ich würde schreiben:

      $erwartet = array(12,45,126);
      if (in_array($sonne, $erwartet)) {
         // ...
      }

        
      Ack. Wenn er auch wirklich 12, und nicht "12" möchte, dann wie in meinem Beispiel true als dritten Parameter.  
        
      
      >   
      > Es ginge auch kürzer mit  
      
      [..]  
      
      > aber die erste Variante ist meiner Meinung nach besser lesbar.  
        
      Insbesondere,  was die Les-/Wartbarkeit angeht, ja.  
        
      Cü,  
        
      Kai
      
      -- 
      Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken in Richtung "Mess up the Web". ([suit](https://forum.selfhtml.org/?t=197497&m=1324775))  
      [Foren-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet) [Site](http://knrs.de/) [Selfzeug](http://selfhtml.knrs.de/) [JS-Lookup](http://js.knrs.de/lookup/)  
      SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
      
  3. [latex]Mae  govannen![/latex]

    if ($sonne == "12" or $sonne == "45" or $sonne == "126" ...

    gibt es da nicht eine einfachere Lösung für

    if ($sonne == "12,45,126...."

    
    > oder so ähnlich?  
      
    Da kann man sich ein paar Sachen zusammenspinnen ...  
      
    Du könntest z.B. die Vorgabe-Werte in ein Array packen und per in\_array() abfragen  
      
    ~~~php
    $werte = array(12, 45, 126);  
      
    if (in_array($sonne, $werte, true)) {  
       lösche_system_partition();  # *gg*  
    }
    

    Cü,

    Kai

    --
    Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken in Richtung "Mess up the Web". (suit)
    Foren-Stylesheet Site Selfzeug JS-Lookup
    SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
  4. Hallo,

    if ($sonne == "12" or $sonne == "45" or $sonne == "126" ...

    gibt es da nicht eine einfachere Lösung für

    if ($sonne == "12,45,126...."

    
    > oder so ähnlich?  
      
    In diesem konkreten Fall mit deinen Werten müsste auch  
      
    `if (strpos("12"."45"."126", $sonne)) ...`{:.language-php}  
      
    gehen. Wenn $sonne aber irgend einen Substring aus "1245126" enthalten kann, dann nicht.  
      
    Gruß, Don P  
    
    
    1. Hi.

      if (strpos("12"."45"."126", $sonne)) ...

      Hier muss Du etwas vorsichtig sein. Das liefert nur (annaehernd) das gewollte, wenn $sonne wirklich ein String ist. Wenn $sonne ein Integer ist (was ich vermute), dann verhaelt sich strpos anders als oben der Operator == (auch wenn dann natuerlich oben bereits ein Vergleich mit Zahlen statt Strings anzuraten waere).

      Wenn $sonne aber irgend einen Substring aus "1245126" enthalten kann, dann nicht.

      Das kommt erschwerend hinzu. Das Konzept von Pruefungen von Werten ist nicht, dass man *anninmmt*, dass keine unerwuenschten Werte auftreten, sondern dass man dieses - genau - prueft ;-)

      Viele Gruesse,
      der Bademeister

      1. Hallo,

        if (strpos("12"."45"."126", $sonne)) ...

        Hier muss Du etwas vorsichtig sein. Das liefert nur (annaehernd) das gewollte, wenn $sonne wirklich ein String ist. Wenn $sonne ein Integer ist (was ich vermute), dann verhaelt sich strpos anders als oben der Operator ==

        Bist du sicher? Hatte nämlich extra bei strpos nachgelesen, und dort steht "mixed" beim zweiten Parameter. Könnte natürlich sein, dass es sich dann trotzdem anders verhält. Um das zu beurteilen kenne ich PHP zu wenig und habe mich auch extra vorsichtig ausgedrückt. Wie anders verhält sich denn dann strpos? Kann es mir gerade gar nicht vorstellen (außer vielleicht mit negativen Integer).

        Da fällt mir noch eine Vereinfachung ein:

        if (strpos("45126", $sonne)) ...

        Es gelten natürlich die gleichen Einschränkungen. Selber würde ich nicht so coden, zumal die Vereinfachung – wenn überhaupt vorhanden – ziemlich marginal ist.

        Das Konzept von Pruefungen von Werten ist nicht, dass man *anninmmt*, dass keine unerwuenschten Werte auftreten, sondern dass man dieses - genau - prueft ;-)

        Ein if() muss man ja nicht zwingend als strenge "Prüfung" auffassen. Oft mus man nichts annehmen oder überprüfen, sondern man weiß ganz genau, welche Werte überhaupt nur vorkommen können und mach dann lediglich eine Unterscheidung. ;)

        Gruß, Don P

        1. Bist du sicher? Hatte nämlich extra bei strpos nachgelesen, und dort steht "mixed" beim zweiten Parameter.

          Ja. Eine Zahl ist da ja auch durchaus erlaubt.

          Wie anders verhält sich denn dann strpos?

          Hättste nur ein bissi weiterlesen müssen:

          "Ist needle kein String, wird der Parameter in einen Integerwert konvertiert, der dem Ordinalwert des Zeichens entspricht."

          D.h. auf deutsch, dass etwa strpos("Test", 115) == 2, denn 115 ist die (ASCII|UNICODE)-Position des kleinen "s".

          Viele Grüße,
          der Bademeister