Ankündigung

Einklappen
Keine Ankündigung bisher.

Verschachtelte IF-Anweisung

Einklappen

Neue Werbung 2019

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

  • Verschachtelte IF-Anweisung

    Hallo Gemeinde,

    ich stehe vor einem Vergleichs-Problem:

    Ich habe 5 verschiedene Film-Formate
    (DCP, DCP-3D, BluRay, BluRay-3D und DVD)

    Die Kinos haben unterschiedliche technische Ausstattungen, welche die Abspielmöglichkeiten betreffen. Einige können NUR DCP, andere gar nicht bzw. können einige BluRay Discs abspielen und andere nicht.

    Nun sollen die beiden Dinge miteinander verglichen werden und demsntprechend eine Warnung ausgegeben werden, wenn in einem Kino ein Film geplant geplant ist, der dort aber gar nicht abgespielt werden kann, weil die technische Möglichkeit dazu fehlt.

    Ich denke, das geht mit einer recht verschachtelten if-anweisung, die sich aber bei so vielen unterschiedlichen Möglichkeiten doch recht hoch potenzieren wird...

    ...oder aber jemand von euch weiß eine elegante Lösung, wie man solche Über-Kreuz-Überprüfungen abarbeiten kann, ohne hunderte if-Anweisungen durchlaufen zu lassen??

    Meine beiden Tabellen haben die gleiche Struktur mit jeweils 5 Spalten

    digArt1, digArt2, digArt3, digArt4, digArt5 (was soviel wie Art der digitalen Abspielung bedeuten soll)

    wenn nur EINE Bedingung erfüllt ist (also wenn sich beispielsweise digArt2 aus der Filmtabelle mit digArt2 aus der Kinotabelle gleicht) dann soll nichts weiter geschehen.

    wenn allerdings die Filmtabelle nur digArt1 und (beispielsweise) digArt4 anbietet aber die Kinotabelle nur digArt2 und digArt5 kann, dann möchte ich eine Warnung (in Form eines kleines Icons) ausgeben lassen.

    Über hilfreiche Ansätze würde ich mich sehr freuen!

    Gruß Steffen

  • #2
    Hi,

    hast du das alles in ner MySQL Datenbank hinterlegt? Dann kannst du das auch direkt mit SQL lösen.

    Du kannst hierbei mit CASE arbeiten http://msdn.microsoft.com/de-de/library/ms181765.aspx und/oder dem IN Operator http://www.techonthenet.com/sql/in.php

    mfg wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Da lässt sich bestimmt auch noch was Normalisieren.

      Ansonsten könntest du die Abspielmöglichkeiten des Kinos in einem Array sammeln und über Arrayfunktionen prüfen ob die Vorraussetzungen des Films erfüllt sind.
      [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
      [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

      Kommentar


      • #4
        ...oder aber jemand von euch weiß eine elegante Lösung, wie man solche Über-Kreuz-Überprüfungen abarbeiten kann, ohne hunderte if-Anweisungen durchlaufen zu lassen??
        Es sind genau 5 verknüpfte Bedingungen. Und verschachtelt oder potenziert wird da goar nüscht.
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #5
          Ja, es sind 5 verknüpfte Bedingungen, aber wie vergleiche ich sie kreuzweise? Bisher habe ich folgendes notiert:

          $VDCP entspricht dem Format "DCP" des Filmes
          $SDCP entspricht dem möglichen "DCP" Format des Kinosaales
          (für die anderen Formate (z.B. BluRay oder DVD) gelten entsprechend ähnliche Variablen (s.u.)
          PHP-Code:
          if( 
          (
          $VDCP==$SDCP AND $SDCP=='0') OR ($VDCP3D==$SDCP3D AND $SDCP3D=='0') OR ($VBR==$SBR AND $SBR=='0') OR ($VBR3D==$SBR3D AND $SBR3D=='0') OR ($VDVD==$SDVD AND $SDVD=='0')

          {
          echo 
          "<br ><img src='bilder/achtung_18x14.png' width='18' height='14' />";                    } 
          Bei dieser if-Anweisung kommt es mir allerdings so vor, als ob IMMER ein "true" dabei herauskommt, obwohl in meinem "Test-Kino" ein Film angelegt ist, der als DCP UND BluRay verfügbar ist und das Kino zwar kein DCP aber BluRay spielen kann. Trotzdem erscheint nach der if-Abfrage auf der Webseite als Ausgabe die Grafik, was eigentlich nicht passieren dürfte (da da Kino ja zumindest BluRay spielen kann). Und hier liegt mein Problem: die logische (verschachtelte?) Vergleichs-Abfrage

          Kommentar


          • #6
            Bei dieser if-Anweisung kommt es mir allerdings so vor, als ob IMMER ein "true" dabei herauskommt, obwohl in meinem "Test-Kino" ein Film angelegt ist, der als DCP UND BluRay verfügbar ist und das Kino zwar kein DCP aber BluRay spielen kann. Trotzdem erscheint nach der if-Abfrage auf der Webseite als Ausgabe die Grafik, was eigentlich nicht passieren dürfte (da da Kino ja zumindest BluRay spielen kann). Und hier liegt mein Problem: die logische (verschachtelte?) Vergleichs-Abfrage
            ...und warum nicht gleich mit SQL? Ist meist performanter!

            Ansonsten würde ich auch zu arrays raten, z.B. kannst du dort ganz easy mit http://php.net/manual/de/function.in-array.php arbeiten u.ä.
            while (!asleep()) sheep++;

            Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

            Kommentar


            • #7
              Zitat von estebu Beitrag anzeigen
              Ja, es sind 5 verknüpfte Bedingungen, aber wie vergleiche ich sie kreuzweise? Bisher habe ich folgendes notiert:
              Du bildest Schnittmengen und untersuchst diese dann.

              Menge 1: Alle verfügbaren Formate
              Menge 2: Formate die ein Kino kann

              Schnittmenge: Verfügbare Formate, die ein Kino kann
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Ich sehe nach wie vor keinen Grund, etwas "kreuzweise" zu verknüpfen.
                [COLOR="#F5F5FF"]--[/COLOR]
                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                [COLOR="#F5F5FF"]
                --[/COLOR]

                Kommentar


                • #9
                  Um es noch einmal deutlich zu machen, habe ich folgende Grafik erstellt.
                  Darin sieht man (oder kann es erahnen), wie viele verschiedene Kombinationsmöglichkeiten bei 5x5 Formaten gibt.
                  Immer nur dann, wenn in einer Abfrage mindestens einmal GRÜN vorkommt, soll die gesamte Abfrage als "true" gelten, wenn nur ROT vorkommt, soll es ein "false" geben. Ist das etwa keine "kreuzweise-Abfrage"?



                  (falls das Bild nicht angezeigt wird, hier noch der Link: http://img5.fotos-hochladen.net/uplo...r354ofi7kq.jpg

                  Kommentar


                  • #10
                    Ich verstehe dein Problem nicht. Nimm dir das Kino was du überprüfen willst. Renn durch die Filme durch die gezeigt werden sollen. Überprüfe ob einer der Film-Formate vom Kino unterstützt wird, wenn ja gib True zurück, wenn nein gib False zurück.

                    So, und wo ist jetzt dein Problem?
                    Zitat von derwunner
                    "Ein FISI ist auf gut-deutsch der Netzwerker. Das heißt Du gehst rauß zum Kunden oder auf die Straße und verlegst Leitungen" - derwunner 2015

                    Kommentar


                    • #11
                      Immer nur dann, wenn in einer Abfrage mindestens einmal GRÜN vorkommt, soll die gesamte Abfrage als "true" gelten…Ist das etwa keine "kreuzweise-Abfrage"?
                      Nö. Das ist ne stinknormale OR-Verknüpfung mit 5 Operanden. Bzw. wenn es darum geht, obige Grafik zu erstellen, sind es einfach nur 5 Vergleiche, die jeweils ein Ergebnis erzeugen.
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar


                      • #12
                        Die (stinknormle) OR-Verknüpfung habe ich im unteren Beispiel bereits versucht - leider ohne Erfolg.
                        Zitat von estebu Beitrag anzeigen
                        PHP-Code:
                        if( 
                        (
                        $VDCP==$SDCP AND $SDCP=='0') OR ($VDCP3D==$SDCP3D AND $SDCP3D=='0') OR ($VBR==$SBR AND $SBR=='0') OR ($VBR3D==$SBR3D AND $SBR3D=='0') OR ($VDVD==$SDVD AND $SDVD=='0')

                        {
                        echo 
                        "<br ><img src='bilder/achtung_18x14.png' width='18' height='14' />";                    } 

                        Kommentar


                        • #13
                          Du testest darauf, ob ein Format existiert, bei dem es nicht passt. Das schließt dann aber nicht aus, dass es eins gibt, bei dem es passt. Vielleicht solltest du darauf prüfen und dann negieren.

                          Oder erweiterbar so:

                          PHP-Code:
                          <?php

                          $movieFormats 
                          = ['dcp''bluray''bluray3d''dvd'];
                          $cinemaFormats = ['dcp3d'];

                          if (
                          === count(array_intersect($movieFormats$cinemaFormats))) {
                              echo 
                          "Nicht in diesem Kino\n";
                          }
                          Oder per Schleife. Wurde ja beides schon genannt.

                          Kommentar

                          Lädt...
                          X