2016-07-28 12 views
0

Mit der unten stehenden while-Schleife, bekomme ich vier Daten im Echo, was ich brauche.PHP setzt vier Daten in ein Array aus einer While-Schleife

$data = []; 

$start = Carbon::createFromDate('2016', '04', '01'); 
$end = Carbon::createFromDate('2017', '04', '01'); 

while($start < $end) 
{ 
    $data[] = $start; 

    echo $start; 

    $start->addMonths('3'); 
} 

Ausgang:

2016-04-01 
2016-07-01 
2016-10-01 
2017-01-01 

Aber wenn ich die $ data [] Array-Dump, bekomme ich nur vier Kollektionen, die jeweils mit dem gleichen Datum:

2017-04-01 

Was soll ich tun falsch? Ich möchte nur die obigen vier Daten in ein Array setzen.

Antwort

3

Sie ordnen jedem Array-Eintrag eine Objektinstanz ($ start) zu (und Objekte sind "per Referenz") und ändern diese Objektinstanz, so dass dieselbe Objektinstanz geändert wird, wo ... "Klon" in Ihr Array

while($start < $end) 
{ 
    $data[] = clone $start; 
    echo $start; 
    $start->addMonths('3'); 
} 
+0

Ja, das ist es, vielen Dank für das für mich Aufräumen, wusste nicht :) – Hardist

1

Genau dies tut

echo $start; 

$start = $start->addMonths('3'); 
0

Sie das Array nicht richtig zu schaffen.

`$data = []` 

Sollte

`$data = array();` 
+0

Short Array-Syntax in der modernen PHP (moderne Wesen vollkommen gültig ist> = PHP 5.4.0, also seit März 2012) –

+0

Thxs, um das für mich zu klären. – DirtyRedz