2 Stimmen

Durch ein Array mit PHP iterieren

Ich möchte PHP verwenden, um ein Array zu füllen, das mit dem heutigen Datum beginnt und mehrere Tage in die Zukunft geht. Als ich das folgende unten versuchte, enthielten alle Spalten "2013-11-18". Ich habe schon 2 Stunden damit herumgespielt, aber ohne Erfolg. Was fehlt mir?

// "Day 0" erhalten, heute falls nicht definiert
if(isset($_GET['DAY0']) == TRUE){
    $day0 = new DateTime($_GET['DAY0']);
} else {
    $day0 = new DateTime('today');
}

    // Tag0 + 7 Tage in dayArray speichern
    $dayArray[0] = $day0;
    for($i=1; $i<8; $i++){
        $day0->modify('+1 day');
        $dayArray[i]= $day0;
    }

    echo ""; 
    for ($i = 0; $i < 7; $i++) {
        echo "".$dayArray[i]->format('Y-m-d')."";
    }
    echo "";

2voto

Rob Punkte 12422

Objekte werden per Referenz übergeben. Sie weisen mehrere Verweise auf dasselbe Objekt in Ihrem Array zu.

Wenn Sie wirklich alle Datumsobjekte im Array benötigen, könnten Sie etwas wie folgt tun

$interval = new DateInterval('P1D');
$start = new DateTime('today');

$dayArray = [clone $start];

for ($i = 1; $i < 8; $i++) {
    $dayArray[] = clone $start->add($interval);
}

Oder Sie können einfach die formatierten Daten speichern, wie bereits vorgeschlagen.

$interval = new DateInterval('P1D');
$start = new DateTime('today');

$dayArray = [$start->format('Y-m-d')];

for ($i = 1; $i < 8; $i++) {
    $dayArray[] = $start->add($interval)->format('Y-m-d');
}

0voto

Paul Lo Punkte 5808

Ersetzen Sie zwei Ihrer $dayArray[i] durch $dayArray[$i]

0voto

Mihai Iorga Punkte 38167

Sie könnten Zeitstempel speichern:

// speichern von day0 + 7 Tagen in dayArray
$dayArray[0] = $day0->format('U');
for($i=1; $i<8; $i++){
    $day0->modify('+1 day');
    $dayArray[$i] = $day0->format('U');
}

echo ""; 
for ($i = 0; $i < 7; $i++) {
    echo "".date('Y-m-d', $dayArray[$i])."";
}

0voto

Tom Punkte 612

Sie können einen DatePeriod so erstellen:

    if(isset($_GET['DAY0']) == TRUE){
        $day0 = new DateTime($_GET['DAY0']);
    } else {
        $day0 = new DateTime('today');
    }

    $enddate = new DateTime();

    $period = new DatePeriod(
            $day0,
            new DateInterval('P1D'),
            $enddate->add(new DateInterval('P7D'))
    );

    echo "";
      foreach ($period as $datetime) {
         echo "".datetime->format('Y-m-d')."";

      }
    echo "";

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X