if($foo==1 || $foo==2 || $foo==...) abkürzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • if($foo==1 || $foo==2 || $foo==...) abkürzen

    PHP-Code:
    if($foo==|| $foo==|| $foo==...) 
    Irgendwo hab ich es schon mal gesehen, dass man es, wenn man immer die selbe Variable nimmt, extrem kürzen kann.

    Sowas ähnliches:

    PHP-Code:
    if($foo==(| ...)) 
    Wie genau funktioniert das? Das oben funktioniert nicht.
    Hab schon danach gesucht war aber nicht so erfolgreich, weil ich nicht wirklich wusste wonach suchen.

  • #2
    Von sowas habe ich noch nicht gehört, mir fällt nur folgendes ein:
    if (in_array($foo, array(1, 2, ...))

    Sollte 1, 2, ... eine einfache Reihe sein, kann mans auch so machen:
    if (in_array($foo, range(1, Max, Sprungweite))

    Kommentar


    • #3
      Besser und angenehmer zu lesen geht es so:
      PHP-Code:
      switch ($foo) {
          case 
      1:
          case 
      2:
          case 
      6:
              
      irgendwas();
              break;
          case 
      4:
          case 
      5:
              
      irgendwas_anderes();
              break;
          default:
              
      standard();

      Falls deine Nummern eh in aufsteigender Reihenfolge sind, kannst du natürlich auch mit >= und <= vergleichen.
      hopka.net!

      Kommentar


      • #4
        Danke, aber ich möchte nicht bei jeweiligen Werten eine Funktion starten sondern Bitweise $foo vergleichen auch nicht nur mit Zahlen.

        Das mit in_array ist in etwa, was ich suche, aber da kann ich leider & oder/und | nicht mir reinnehmen (es kann beides vorkommen & und |).

        Kommentar


        • #5
          Original geschrieben von jmc
          Danke, aber ich möchte nicht bei jeweiligen Werten eine Funktion starten sondern Bitweise $foo vergleichen auch nicht nur mit Zahlen.
          Du musst bei switch / case auch keine Funktion aufrufen, und du kannst auch nicht nur mit Zahlen vergleichen. Habe ich nur im Beispiel so gemacht.

          Warum willst du denn unbedingt bitweise vergleichen?
          hopka.net!

          Kommentar


          • #6
            Weil ich teilweise ziemlich lange variabeln mit ca 10 Dingen vergleichen muss.

            z.B.
            PHP-Code:
            if(($typof_item_12899=="offence" && sizeof_item_12899>=&& sizeof_item_12899<=129) ||
            (
            $typof_item_12899=="defence" && sizeof_item_12899>=&& sizeof_item_12899<=28){...} 
            Dies ist eines der Beispiele aus meinem Code und die werden meistens noch länger. Es geht natürlich so, aber wenn es eine andere Möglichkeit gäbe, wäre die um einiges kürzer.

            Kommentar


            • #7
              Original geschrieben von jmc
              Danke, aber ich möchte nicht bei jeweiligen Werten eine Funktion starten sondern Bitweise $foo vergleichen auch nicht nur mit Zahlen.

              Das mit in_array ist in etwa, was ich suche, aber da kann ich leider & oder/und | nicht mir reinnehmen (es kann beides vorkommen & und |).
              Das mit dem bitweise verstehe ich nicht, aber du kannst einen array von unter- und obergrenzen machen, falls es hilft. für dein konkretes Beispiel, im threadtitle, reicht auch "if ($foo>0)" aus......

              Kommentar


              • #8
                Da würde 0.1 auch gelten....

                Dann müsste ich schon wieder nach einer regex suchen und dazu noch die obere Grenze festlegen. Ausserdem kann es manchmal sein:

                if($foo==1 || $foo==7 ...)

                also nicht, wenn $foo z.B. ==6. Noch etwas: es kommen darunter auch noch Strings vor.

                Kommentar


                • #9
                  Original geschrieben von jmc
                  Da würde 0.1 auch gelten....

                  Dann müsste ich schon wieder nach einer regex suchen und dazu noch die obere Grenze festlegen. Ausserdem kann es manchmal sein:

                  if($foo==1 || $foo==7 ...)

                  also nicht, wenn $foo z.B. ==6. Noch etwas: es kommen darunter auch noch Strings vor.
                  für so unregelmässiges zeugs kannst du einen array machen oder halt ein if. Falls es der Übersichtlichkeit dient, dann mehrere if's mit Hilfsvariabeln welche in ein Master-if gehen. Das Problem mit 0.1 kann man mit einem is_int() oder so entschärfen, aber darauf wärst Du auch selber gekommen.

                  PS wenn alles nicht geht, zuerst ein mail() an den Webmaster mit dem Wert von $foo , soll er entscheiden.



                  Zuletzt geändert von mäander_; 14.07.2006, 10:15.

                  Kommentar


                  • #10
                    Ja, mit Arrays ist das Problem wohl am besten gelöst ausser dass man da keine && / || Unterscheidungen in den Arrays machen kann.

                    Kommentar


                    • #11
                      kannst ja array of [untergrenze, obergrenze] machen aber darauf wärst du auch selber gekommen.

                      Kommentar


                      • #12
                        onemorenerd hat diese und beste Lösung ja schon vorgeschlagen

                        Kommentar


                        • #13
                          naja, sein Vorschlag war range, also zB inarray($foo,array(1,3,5,7...,19)) .

                          Finde die Unterschiede - wieviele und welche - als phpSommerbeilage zur phpBildzeitung von heute.

                          Kommentar


                          • #14
                            ???
                            Dein Beispiel mit Sommerzeitung kapiere ich net, aber ich kann mit max. und min. keine Strings verwenden also geht das so oder so nicht.

                            Kommentar


                            • #15
                              Original geschrieben von jmc
                              also geht das so oder so nicht.
                              Also - geht es nicht.

                              Kommentar

                              Lädt...
                              X