Arbeit mit Flags in PHP
Jetzt lernen wir, mit Flags zu arbeiten.
Ein Flag ist eine spezielle Variable, die
nur zwei Werte annehmen kann: true
und false. Mit Flags kann man
Aufgaben lösen, die die Abwesenheit von etwas prüfen:
man kann zum Beispiel prüfen, dass in einem Array
kein Element mit einem bestimmten Wert vorhanden ist. Lasst uns
beginnen.
Lasst uns die folgende Aufgabe lösen: gegeben ist ein Array
mit Zahlen, es soll geprüft werden, ob darin
ein Element mit dem Wert 3 vorhanden ist oder nicht. Wenn
ja, geben wir '+++' aus, wenn nicht -
geben wir '---' aus.
Zuerst versuchen wir, '+++' auszugeben.
Dazu durchlaufen wir alle Elemente unseres Arrays
und fragen mit einer if-Bedingung ab - ist das aktuelle
Element gleich dem Wert 3? Wenn ja, geben wir
'+++' aus:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Aber unsere Lösung ist nicht sehr gut: denn wenn
im Array nicht nur ein Wert 3 ist,
sondern mehrere, dann wird '+++' mehrmals
ausgegeben. Lasst uns unser Array ändern (wir machen
zwei Elemente mit dem Wert 3) und uns davon überzeugen:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // gibt mehrmals aus
}
}
?>
Wir beheben das Problem: wir beenden die Schleife mit
break, sobald das Element gefunden wurde:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // beendet die Schleife
}
}
?>
Lasst uns nun versuchen, es so zu machen, dass,
wenn im Array überhaupt keine Elemente mit dem Wert
3 vorhanden sind, '---' ausgegeben wird. Eine verbreitete
Fehlannahme wäre, else zu
unserer if-Bedingung hinzuzufügen - in diesem Fall würde
'---' für alle Elemente ausgegeben werden, die nicht
3 sind:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // gibt beim Element 3 aus
} else {
echo '---'; // gibt bei den Elementen 1, 2, 4, 5 aus
}
}
?>
Zusammengefasst, die Idee, else hinzuzufügen - ist eine schlechte
Idee, sie funktioniert nicht. Um Aufgaben dieses
Typs zu lösen (solche Aufgaben kommen häufig
vor) verwendet man sogenannte Flags.
Wie bereits oben erwähnt, ist ein Flag eine
Variable, die zwei Werte annehmen kann:
true oder false.
Also, lasst uns eine Variable flag machen
mit folgender Bedeutung: wenn sie gleich true ist,
dann gibt es im Array ein Element 3, und wenn
false, dann gibt es ein solches Element nicht.
Anfangs setzen wir die Variable flag
auf den Wert false - das heißt, wir gehen davon aus,
dass das Element 3 im Array nicht vorhanden ist:
$arr = [1, 2, 3, 4, 5];
$flag = false; // wir gehen davon aus, dass das Element 3 nicht im Array ist
Dann starten wir eine Schleife mit einer if-Bedingung, so wie wir es
schon früher gemacht haben. Wenn die Schleife feststellt, dass im Array
ein Element 3 vorhanden ist - dann setzen wir die Variable flag
auf den Wert true und verlassen die Schleife
mit break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // wir gehen davon aus, dass das Element 3 nicht im Array ist
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // Element ist vorhanden - wir definieren die Variable $flag neu
break; // wir verlassen die Schleife
}
}
?>
Die Antwort auf die Frage, ob im Array 3
enthalten ist oder nicht, können wir erst nach der Schleife geben.
Und diese Antwort haben wir bereits: nach der Schleife
kann die Variable flag false geblieben sein
oder sie kann ihren Wert auf true geändert haben,
wenn die Schleife im Array 3 gefunden hat:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// hier ist die Variable $flag gleich true oder false
?>
Jetzt können wir nach der Schleife eine if-Bedingung machen, die
die Variable flag betrachtet und
'+++' oder '---' auf dem Bildschirm ausgibt:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
if ($flag === true) {
echo '+++';
} else {
echo '---';
}
?>
Gegeben ist ein Array:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Prüfen Sie, ob in diesem Array das Element
'c' vorhanden ist. Wenn ja - geben Sie '+++' aus,
und wenn nicht - geben Sie '---' aus.
Schreiben Sie Code, der prüft, ob eine Zahl eine Primzahl ist oder nicht. Eine Primzahl ist nur durch eins und durch sich selbst teilbar, und nicht durch andere Zahlen.