2017-06-01 4 views
0

So zugegriffen wird, habe ich die folgende for-Schleife:PHP- For-Schleife nicht

$arr = []; 
for($x = date('j', strtotime('this week')); $x <= date('j', strtotime('this week + 6 days')); $x++) 
      { 
       dd('test'); 
       $arr[$x] = [ 
        'y' => $x, 
        's' => 0, 
        'c' => 0, 
        'cl' => 0 
       ]; 
      } 
      dd('test2'); 

Das Problem ist, dass die Schleife nie zugegriffen wird ... die dd() zurückkehrt ‚test2‘ aber die for-Schleife ist nicht zugegriffen und es werden keine Fehler zurückgegeben. Ich habe eine ähnliche:

for($x = 1; $x <= date('t', strtotime('today')); $x++) 
      { 
       $arr[$x] = [ 
        'y' => $x . ' ' . date('M', strtotime('today')), 
        's' => 0, 
        'c' => 0, 
        'cl' => 0 
       ]; 
      } 

Und diese funktioniert perfekt. Was ich versuche, ist Indizes für $ arr basierend auf den Tagen dieser Woche oder im folgenden Fall basierend auf den Tagen dieses Monats zu generieren. Ich verstehe einfach nicht, warum einer arbeitet und der andere nicht. Vielen Dank für Ihre Zeit und Hilfe!

+0

I var_dump würde 'date ('j', strtotime ('diese Woche'))' zu sehen, was val Sie bekommen – ThisGuyHasTwoThumbs

+0

https://3v4l.org/LrLcv – Xatenev

+0

Ich bin ziemlich sicher "diese Woche" ist nicht was du willst. Was versuchst du zu erreichen? – Xatenev

Antwort

2

Was haben Sie mit:

$x = date('j', strtotime('this week')); //returns 29 

$x <= date('j', strtotime('this week + 6 days')) // returns 4 

Und nie an die Schleife eingeben (der Betrieb ist: 29 < 4).

Wenn Sie die j für eine z ändern (in der PHP-oficial Dokumentation für Datum:

Der Tag des Jahres (ab 0)

) Sie erhalten das:

x: 148 < x: 154 

Dann können Sie innerhalb der Schleife die j verwenden, um den Wochentag zu speichern, und die Schleife wird wo rk.

Wenn Sie zwischen zwei Terminen gehen wollen, Tage hinzufügen, gibt es andere Lösungen auch wie: How to count days between two dates in PHP?

Hoffe, es hilft!

+0

Der Tag des Jahres wird in der letzten Dezemberwoche nicht funktionieren. – Barmar

+0

Es funktioniert, aber die Zählung beginnt in 0. Wenn Sie mit Daten arbeiten möchten, hat PHP eine sehr mächtige Optionen mit Datum, strtotime und so. Sie können sogar mit dem Schaltjahr arbeiten oder wissen, welcher Tag des Monats der 12/02/1893 war (zum Beispiel). Vielleicht ist die Lösung hier Arbeit mit reinem Datum im for, wie (in Pseudocode): x = Datum (jetzt); x

+0

In der letzten Woche des Jahres wird es versuchen, von etwa 360 zu 2 zu loopen, und das wird das gleiche Problem haben wie von 29 zu 4 mit dem Tag des Monats zu gehen. – Barmar

0
$date = new DateTime('this week Sunday'); 
$endDate = new DateTime('this week Saturday'); 

while($date<=$endDate){ 
    // do some stuff 
    // ... 

    $date->modify('+1 day'); 
} 
+0

Können Sie bitte erklären, was Ihre Lösung tut, anstatt nur ein Stück Code einfügen –

+0

es ist sehr selbsterklärend nichts Schickes hier nur Schleifen Tage der aktuellen Woche mit DateTime-Klasse und While-Schleife, stoppt die Schleife Ausführung nach dem Erreichen Samstag und verwendet $ date Objekt als Referenz. –

0

soution aufgrund @JP gefunden. Aulet Erklärung:

for($x = 0; $x <= 6; $x++) 
      { 
       $date = date('j', strtotime('this week +' .$x . 'days')); 
       $arr[$date] = [ 
        'y' => $date, 
        's' => 0, 
        'c' => 0, 
        'cl' => 0 
       ]; 
      }