Sushi: Komplexes if

Hallo leute ich habe eine frage da ich mir nicht sicher bin und auch noch keine anleitung im netz gefunden habe, quälle ich jetzt euch mit einer frage.

Ich besitze zwei identische arrays.

a_ary udn b_ary beide sehen so in etwa aus.

a_ary[$key]['R1FLG']
a_ary[$key]['R2FLG']
a_ary[$key]['R3FLG']
a_ary[$key]['R4FLG']

b_ary[$key]['R1FLG']
b_ary[$key]['R2FLG']
b_ary[$key]['R3FLG']
b_ary[$key]['R4FLG']

$key ist halt ein int der inkrementiert wird und so die elemente durchzählt.

ich bräuchte in etwa so eine if abfrage.

if(a_ary[$key]['R1FLG'] == b_ary[$key]['R1FLG'] && a_ary[$key]['R1FLG'] == 1 || a_ary[$key]['R2FLG'] == b_ary[$key]['R2FLG'] && a_ary[$key]['R3FLG'] == 1 || a_ary[$key]['R3FLG'] == b_ary[$key]['R3FLG'] && a_ary[$key]['R3FLG'] == 1 || a_ary[$key]['R4FLG'] == b_ary[$key]['R4FLG'] && a_ary[$key]['R4FLG'] == 1)

wenn array a['R1FLG'] ist gleich b['R1FLG'] und ['R1FLG'] == 1 und so weiter mit ['R2FLG']['R3FLG']['R4FLG'].

Geht das?
Ich bekomme leider nicht das gewünschte ergebniss.
Weiß jemand wiso ?

Danke
Sushi

  1. echo $begrüßung;

    if(a_ary[$key]['R1FLG'] == b_ary[$key]['R1FLG'] && a_ary[$key]['R1FLG'] == 1 || a_ary[$key]['R2FLG'] == b_ary[$key]['R2FLG'] && a_ary[$key]['R3FLG'] == 1 || a_ary[$key]['R3FLG'] == b_ary[$key]['R3FLG'] && a_ary[$key]['R3FLG'] == 1 || a_ary[$key]['R4FLG'] == b_ary[$key]['R4FLG'] && a_ary[$key]['R4FLG'] == 1)
    wenn array a['R1FLG'] ist gleich b['R1FLG'] und ['R1FLG'] == 1 und so weiter mit ['R2FLG']['R3FLG']['R4FLG'].
    Ich bekomme leider nicht das gewünschte ergebniss.
    Weiß jemand wiso ?

    Nein, wird sicher niemand hier wissen, weil nur du weißt, was die aktuellen Inhalte deiner Variablen sind.

    Vielleicht ist es auch nur ein Tippfehler, der sich eventuell besser offenbarte, wenn du deinen Code mehr formatiertest

    if (a_ary[$key]['R1FLG'] == b_ary[$key]['R1FLG'] && a_ary[$key]['R1FLG'] == 1 ||
        a_ary[$key]['R2FLG'] == b_ary[$key]['R2FLG'] && a_ary[$key]['R3FLG'] == 1 ||
        a_ary[$key]['R3FLG'] == b_ary[$key]['R3FLG'] && a_ary[$key]['R3FLG'] == 1 ||
        a_ary[$key]['R4FLG'] == b_ary[$key]['R4FLG'] && a_ary[$key]['R4FLG'] == 1)

    echo "$verabschiedung $name";

    1. Opps tippfehler.

      Leider erklärt das das problem noch immer nicht der tippfehler steht nur im forum. so schaut das original aus.

      if(
      $allregary[$i]['R1FLG'] == $iduserary[$allary['USERID']]['ROLLE'] && $allregary[$i]['R1FLG'] == 1 ||
      $allregary[$i]['R2FLG'] == $iduserary[$allary['USERID']]['ROLLE'] && $allregary[$i]['R2FLG'] == 1 ||
      $allregary[$i]['R3FLG'] == $iduserary[$allary['USERID']]['ROLLE'] && $allregary[$i]['R3FLG'] == 1 ||
      $allregary[$i]['R4FLG'] == $iduserary[$allary['USERID']]['ROLLE'] && $allregary[$i]['R4FLG'] == 1)

      leider ist der tippfehler nicht schuld.
      eigentlich dachte ich das ich php einigermaßen beherrsche aber dem ist anscheinend nicht so.  kann ich wirklich unendlich viele && || in eine if abfrage stellen?

      Danke
      Sushi

      1. Hallo

        if(
        $allregary[$i]['R1FLG'] == $iduserary[$allary['USERID']]['ROLLE'] && $allregary[$i]['R1FLG'] == 1 ||
        $allregary[$i]['R2FLG'] == $iduserary[$allary['USERID']]['ROLLE'] && $allregary[$i]['R2FLG'] == 1 ||
        $allregary[$i]['R3FLG'] == $iduserary[$allary['USERID']]['ROLLE'] && $allregary[$i]['R3FLG'] == 1 ||
        $allregary[$i]['R4FLG'] == $iduserary[$allary['USERID']]['ROLLE'] && $allregary[$i]['R4FLG'] == 1)

        leider ist der tippfehler nicht schuld.
        eigentlich dachte ich das ich php einigermaßen beherrsche aber dem ist anscheinend nicht so.  kann ich wirklich unendlich viele && || in eine if abfrage stellen?

        Nein, wenn die Festplatte Deines Servers voll ist, dann ist Ende :-)
        Aber wo ist nun Dein Problem? Vielleicht solltest Du Deinen Ausdrücken
        noch ein paar (überflüssige) Klammern spendieren, die den Zusammenhang
        deutlicher machen.

        Mir persönlich geht es so, dass ich implizite Klammerung, d.h. die
        Operatorenrangfolge, nach Möglichkeit vermeide. Für mich ist die explizite
        Klammerung ein Hilfsmittel, Ausdrücke schneller zu erfassen und zu verstehen.
        Ein weiteres Hilfsmittel ist das Einfügen von Kommentaren.

        Ich vermisse hier beides.

        Freundliche Grüße

        Vinzenz

        1. meinst du so ?

          if(
          ($allregary[$i]['R1FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R1FLG'] == 1) ||
          ($allregary[$i]['R2FLG'] == $iduserary[$allary['USERID']]['ROLLE']) ($allregary[$i]['R2FLG'] == 1) ||
          ($allregary[$i]['R3FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R3FLG'] == 1) ||
          ($allregary[$i]['R4FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R4FLG'] == 1))

          ich bin mit nicht sicher was du mit Operatorenrangfolge (==, &&, ||) meinst.

          danke
          sushi

          1. if(
            ($allregary[$i]['R1FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R1FLG'] == 1) ||
            ($allregary[$i]['R2FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R2FLG'] == 1) ||
            ($allregary[$i]['R3FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R3FLG'] == 1) ||
            ($allregary[$i]['R4FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R4FLG'] == 1))

            so jetzt ist es wieder richitg.

            sushi

            1. funktionieren tut es aber trotzdem nicht.

              bitte um hilfe
              danke
              sushi

            2. Hallo

              da, && stärker bindet als || hast Du implizite Klammern für jede Zeile:

              if(
              ($allregary[$i]['R1FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R1FLG'] == 1) ||
              ($allregary[$i]['R2FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R2FLG'] == 1) ||
              ($allregary[$i]['R3FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R3FLG'] == 1) ||
              ($allregary[$i]['R4FLG'] == $iduserary[$allary['USERID']]['ROLLE']) && ($allregary[$i]['R4FLG'] == 1))

                
              if(  
                  // Array-Element aus A1 und Array-Element aus A2 gleich sind  
                  ($allregary[$i]['R1FLG'] == $iduserary[$allary['USERID']]['ROLLE'])  
                       // und dazu das Array-Element aus A1 den Wert 1 hat  
                       && ($allregary[$i]['R1FLG'] == 1)  
                  // oder  
                  ||  
                  // die beiden nächsten Array-Elemente aus A1 und A2 gleich sind  
                  ($allregary[$i]['R2FLG'] == $iduserary[$allary['USERID']]['ROLLE'])  
                       // und dazu das Array-Element aus A1 den Wert 1 hat  
                       && ($allregary[$i]['R2FLG'] == 1)  
                  // und so weiter  
                  ||  
              
              

              das kann man umschreiben zu:

                
              if (  
                  // die ersten beiden Array-Elemente aus A1 und A2 haben den Wert 1  
                  // dann sind sie auch gleich :-)  
                  (      1 == allregary[$i]['R1FLG']  
                      && 1 == $iduserary[$allary['USERID']]['ROLLE']  )  
                  || // oder  
                  // die nächsten beiden Array-Elemente aus A1 und A2 haben den Wert 1  
                  // dann sind sie auch gleich :-)  
                  (      1 == allregary[$i]['R2FLG']  
                      && 1 == $iduserary[$allary['USERID']]['ROLLE'])  
                  || // oder ...  
              )  
              
              

              was man umformen kann:

                
              if (  
                   // dieses Arrayelement muss unbedingt eine Eins enthalten  
                   (1 == $iduserary[$allary['USERID']]['ROLLE'])  
                   &&  
                   (    1 == allregary[$i]['R1FLG']  
                     || 1 == allregary[$i]['R2FLG']  
                     || 1 == allregary[$i]['R3FLG']  
                     // und so weiter ...  
                 )  
              
              

              Das heißt für deinen derzeitigen Ausdruck:
              Er kann nur dann wahr werden, wenn das eine spezielle Arrayelement eine 1 enthält - und mindestens irgendeines der unterschiedlichen Arrayelemente
              des anderen Arrays ebenfalls eine 1 enthält.

              Wenn Deine Logik eine andere ist, dann ist Dein Ausdruck verkehrt ...

              Freundliche Grüße

              Vinzenz

              1. danke danke danke
                jetzt gehts auch.

                sushi

  2. Hallo Sushi,

    if(a_ary[$key]['R1FLG'] == b_ary[$key]['R1FLG'] && a_ary[$key]['R1FLG'] == 1
    || a_ary[$key]['R2FLG'] == b_ary[$key]['R2FLG'] && a_ary[$key]['R3FLG'] == 1
    || a_ary[$key]['R3FLG'] == b_ary[$key]['R3FLG'] && a_ary[$key]['R3FLG'] == 1
    || a_ary[$key]['R4FLG'] == b_ary[$key]['R4FLG'] && a_ary[$key]['R4FLG'] == 1)

    ich habe das mal etwas umformatiert. Siehst du jetzt den Fehler?

    Gruß, Jürgen

  3. Hello,

    Weiß jemand wiso ?

    1. Das ist ein typischer Thread für das <I> von neulich von Dedlfix.
    2. Vinzenz hat bereits einen Beitrag dazu geleistet :-)

    3. ich will es auch versuchen:

    a. ist die Fehlerkontrolle scharf? Das bedeutet, dass Du bitte ALLE Fehlermeldungen
          freudig empfängst, die Dir angeboten werden. Also error_reporting(E_ALL); !

    b. Es wird nicht überprüft, ob die Elemente des Arrays überhaupt vorhanden sind
          Dadurch kann es zu durchaus verwunderlichen Seiteneffekten kommen.

    Da Arrays dieser Art i.d.R. dynamisch entstehen, wäre ein vorheriger Durchlauf
          der Arrays mit foreach() und if (!isset(ELEMENT)) { ## Fehlermeldung } zweckmäßig.

    c. Gib uns bitte einen var_dump() oder ein print_r() von den beiden Arrays.
          Sonst wirst Du den Fehler vermutlich nie finden.
          Das ist dann sozusagen das äugische foreach()

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)