Komplexes if
Sushi
- php
0 dedlfix0 sushi0 Vinzenz Mai0 sushi0 sushi0 sushi0 Vinzenz Mai0 sushi
0 JürgenB0 Umgang mit dynamisch erzeugten Arrays
Tom
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
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";
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
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
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
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
funktionieren tut es aber trotzdem nicht.
bitte um hilfe
danke
sushi
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
danke danke danke
jetzt gehts auch.
sushi
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
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