Rolf B: Darstellung/ Ausgabe von weiteren Einträge abhängig machen

Beitrag lesen

Hallo Bernd,

leider ist ein Algorithmus zum Finden von freien Zeiten nicht ganz so einfach. Wenn man Intervalle zu einander in Beziehung setzen muss, gibt es einfach eine bestimmte Menge von möglichen Kombinationen, die zu behandeln sind.

Alternativ zu dem, was ich gezeigt habe, könnte man auch versuchen die Termine nach Beginn zu sortieren und Lücken dazwischen zu finden - aber wirklich einfacher ist das auch nicht. Vor allem nicht, wenn Überlappungen der Termine möglich sind.

Zu deiner Schlussfrage.

Die Variablenersetzung in Strings "in doppelten Anführungszeichen" kennst Du? Vielleicht nicht, ich habe sie bei Dir kaum gesehen.

Also:

$a = "World";
echo "Hello $a";
// gibt aus: Hello World,

Das funktioniert in "einfachen" Fällen ganz gut. PHP versteht sogar Arrays und Verweise auf Objekte:

$x = [ 1,2,3, "foo" => "bar" ];
$y = new Zeitintervall();
$y->von = "08:00";
$y->bis = "12:00";
echo "Eintrag 1 ist $x[1], für foo haben wir $x[foo]. Zeit von $x->von bis $x->bis";
$a = "foo";
echo "$a_bar";   // gibt Fehlermeldung aus: Variable a_bar unbekannt

Man beachte: keine Anführungszeichen um das "foo".

Damit ist aber auch Schluss. PHP muss erkennen können, wo eine Variable endet, und kompliziertere Zugriffe wie diese sind so nicht möglich. Für weiter gehende Fälle gibt es die "komplexe Syntax". Man schließt dafür den Variablenzugriff in geschweifte Klammern ein. Wichtig ist nur, dass das $ direkt hinter dem { steht, kein Space dazwischen.

// Mehrfacher Index
echo "Name: {$tabelle[3][name]}"; 
// Explizites Klarmachen, wo der Variablenname endet
$a = "foo";
echo "{$a}_bar";

Das, was im letzten Beispiel steht, habe ich bei Dir gemacht. Statt der Variablenersetzng kann man auch eine Stringverkettung benutzen, das ist nur mehr Schreibarbeit. "{$a}_bar" ist gleichbedeutend mit ($a . "_bar").

Ich schreibe Dir den Code, den Du nicht verstanden hast, mal in unterschiedlichen Kompressionsstufen auf:

// Ganz kurz
$w_prefix = ['so', 'mo', 'di', 'mi', 'do', 'fr', 'sa'][date("w", $zeit)];
$von = $arrayUserAktiv["{$w_prefix}_von"];
$bis = $arrayUserAktiv["{$w_prefix}_bis"];

// Etwas länger
$w_tage = ARRAY('so', 'mo', 'di', 'mi', 'do', 'fr', 'sa');
$w_prefix = $w_tage[date("w", $zeit)];

$von = $arrayUserAktiv[$w_prefix . "_von"];
$bis = $arrayUserAktiv[$w_prefix . "_bis"];

// Ganz ausführlich
$w_tage = ARRAY('so', 'mo', 'di', 'mi', 'do', 'fr', 'sa');
$w_tag_nr = date("w", $zeit);
$w_prefix = $w_tage[$w_tag_nr];
$von_key = $w_prefix . "_von";
$bis_key = $w_prefix . "_bis";

$von = $arrayUserAktiv[$von_key];
$bis = $arrayUserAktiv[$bis_key];

Im ersten Schritt wird über die Wochentagnummer ein Wochentagkürzel (so, mo, ..., sa) bestimmt.

Aus dem Wochentagkürzel leiten sich dann die Zugriffsschlüssel auf $arrayUserAktiv ab. Entweder mit Variablenersetzung, oder mit Stringverkettung. Deine Array-Schlüssel heißen mo_von oder sa_bis, genau das baue ich zusammen.

Mit diesen Zugriffsschlüsseln können dann die von- und bis-Werte für den Tag ausgelesen werden. Die eigentlich Magick ist, dass auch für ein assoziatives Array die Indexe in Variablen stehen können.

Rolf

--
sumpsi - posui - clusi