Mehrdimensionales arrays durchsuchen
Hallo zusammen
Ich möchte ein Mehrdimensionales arrays vergeichen und komme nicht weiter.
Da ich noch nicht so erfahren bin, kann es auch einen kleiner Fehler sein
Nun möchte ich vergleichen ob das Geschäft im Moment offen ist, leider klappt bereits der Wochentag vergleich nicht:
Ausgabe = Für jeden Arrey kommt ein test
Ich möchte ein Mehrdimensionales arrays vergeichen und komme nicht weiter.
Da ich noch nicht so erfahren bin, kann es auch einen kleiner Fehler sein
array('Montag','08:00','12:00'), //Mo
array('Montag','13:30','18:30'),
array('Dienstag','08:00','12:00'), //Di
......
Nun möchte ich vergleichen ob das Geschäft im Moment offen ist, leider klappt bereits der Wochentag vergleich nicht:
foreach( $offen as $oeffnungszeiten)
{
if ( $wochentag == $oeffnungszeiten )
{ echo "offen";}
else { echo "test";}
}
Ausgabe = Für jeden Arrey kommt ein test
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 338771
Url: https://administrator.de/contentid/338771
Ausgedruckt am: 24.11.2024 um 17:11 Uhr
4 Kommentare
Neuester Kommentar
Machs doch so:
Gruß
<?php
$times = array('Mon' => array(
array('08:00','12:00'),
array('13:00','17:00')
),
'Tue' => array(
array('08:00','12:00'),
array('13:00','17:00')
),
'Wed' => array(
array('08:00','12:00'),
array('13:00','16:00')
),
'Thu' => array(
array('08:00','12:00'),
array('13:00','16:00')
),
'Fri' => array(
array('08:00','12:00'),
array('13:00','15:00')
)
);
$tz = new DateTimeZone('Europe/Berlin');
$weekday = date('D');
$now = new DateTime('now',$tz);
$status = 'Closed';
if (isset($times[$weekday])){
foreach ($times[$weekday] as $time){
if ($now >= (new DateTime($time,$tz)) && $now <= (new DateTime($time[1],$tz))){
$status = "Open";
break;
}
}
}
echo $status;
?>
Moin,
an welcher Stelle hast du denn dein array(x, y, z) im zweiten Code eingebunden (x= Wochentag, y=von, z=bis)?
denn woher soll denn dein Programm innerhalb der foreach-Schleife wissen, wo es den $wochentag hernehmen soll
Und du hast ja nirgendwo die DImension/ Adresse adressiert, in denen deine Wochentage/ Uhrzeiten reingeschrieben werden sollen.
Auch wäre es leichter, wenn du mit timestamps arbeitest, was das auswerten hinterher erleichtert.
Du könntest das z.B. wie folgt umsetzen (nicht schön/ elegant, aber funktional):
Als nächstes (hier jetzt nur die logischen Ansätze) gehst du mit einer Schleife her und prüfst, ob dein aktueller Wochentag passt:
Das geht auch definitiv alles schöner mit weiteren Schleifen/ einem anderen Aufbau, aber das Prinzip sollte so klarer werden
Gruß
em-pie
an welcher Stelle hast du denn dein array(x, y, z) im zweiten Code eingebunden (x= Wochentag, y=von, z=bis)?
denn woher soll denn dein Programm innerhalb der foreach-Schleife wissen, wo es den $wochentag hernehmen soll
Und du hast ja nirgendwo die DImension/ Adresse adressiert, in denen deine Wochentage/ Uhrzeiten reingeschrieben werden sollen.
Auch wäre es leichter, wenn du mit timestamps arbeitest, was das auswerten hinterher erleichtert.
Du könntest das z.B. wie folgt umsetzen (nicht schön/ elegant, aber funktional):
$open(0,0,0) = 'Montag';
$open(0,1,0) = '08:00';
$open(0,1,1) = '12:00';
$open(0,2,0) = '13:30';
$open(0,2,1) = '18:30';
$open(1,0,0) = 'Montag';
$open(1,1,0) = '08:00';
$open(1,1,1) = '12:00';
$open(1,2,0) = '13:30';
$open(1,2,1) = '18:30';
Als nächstes (hier jetzt nur die logischen Ansätze) gehst du mit einer Schleife her und prüfst, ob dein aktueller Wochentag passt:
for ($i = 0; $i <= 7; $i++) {
if ($open($i, 0, 0) == 'Montag') {
echo "Montags von " . $open($i, 1,0) . " bis " . $open($i, 1,1);
echo " und von " . $open($i, 2,0) . " bis " . $open($i, 2,1);
}
elseif ($open($i, 0, 0) == 'Dienstag') {
echo "Dienstags von " . $open($i, 1,0) . " bis " . $open($i, 1,1);
echo " und von " . $open($i, 2,0) . " bis " . $open($i, 2,1);
}
...
else { echo "geschlossen" }
}
Das geht auch definitiv alles schöner mit weiteren Schleifen/ einem anderen Aufbau, aber das Prinzip sollte so klarer werden
Gruß
em-pie
Dann hast du einen Fehler eingebaut, das obige Beispiel funktioniert hier problemlos sofern die Zeitzone des Servers übereinstimmt. Du kannst aber beim Erzeugen des DateTime Objekts noch zusätzlich die Zeitzone angeben, denn wenn die auf dem Server nicht mit der auf dem Client übereinstimmt stimmt die Zeit nicht.
DateTimeZone::EUROPE
Bzw.
new DateTimeZone('Europe/Berlin')
http://php.net/manual/de/class.datetimezone.php
p.s. Habe es oben noch ergänzt.
DateTimeZone::EUROPE
Bzw.
new DateTimeZone('Europe/Berlin')
http://php.net/manual/de/class.datetimezone.php
p.s. Habe es oben noch ergänzt.