我試圖在一個回圈中創建一個周期陣列(每個都有一個開始和一個結束),但是每次我對時間變數使用add()時,最終陣列中的所有值都會被重寫為時間變數值。
我的代碼:
$newPeriods = []; //final array
$firstPeriod = array(
"start"=>new DateTime("2022/10/05 16:30:00"),
"end"=>new DateTime("2022/10/05 16:45:00")
);
for ($i = 0; $i < 3; $i ) {
//if not first repetition
if (isset($newPeriod)) {
$newPeriod["start"] = end($newPeriods)["start"];
$newPeriod["end"] = end($newPeriods)["end"];
//I figured out that the array $newPeriods gets rewriten in the next two lines
$newPeriod["start"]->add(new DateInterval('P1W'));
$newPeriod["end"]->add(new DateInterval('P1W'));
}
//first repetition
else {
$newPeriod['start'] = $firstPeriod["start"];
$newPeriod['end'] = $firstPeriod["end"];
}
var_dump($newPeriod); //this prints what I expect to find in $newPeriods
array_push($newPeriods, $newPeriod);
}
var_dump($newPeriods);//all elements are like the last $newPeriod
(按預期)的匯總輸出var_dump($newPeriod)(值是 DATETIME 物件)
array(2) {
["start"]=>"2022-10-05 23:55:00.000000"
["end"]=>"2022-10-06 00:15:00.000000"
}
array(2) {
["start"]=>"2022-10-12 23:55:00.000000"
["end"]=>"2022-10-13 00:15:00.000000"
}
array(2) {
["start"]=>"2022-10-19 23:55:00.000000"
["end"]=>"2022-10-20 00:15:00.000000"
}
匯總輸出var_dump($newPeriods)(并非如預期的那樣重復所有值):
array(3) {
[0]=>
array(2) {
["start"]=>"2022-10-19 23:55:00.000000"
["end"]=>"2022-10-20 00:15:00.000000"
}
[1]=>
array(2) {
["start"]=>"2022-10-19 23:55:00.000000"
["end"]=>"2022-10-20 00:15:00.000000"
}
[2]=>
array(2) {
["start"]=>"2022-10-19 23:55:00.000000"
["end"]=>"2022-10-20 00:15:00.000000"
}
}
uj5u.com熱心網友回復:
正如@MarkusAO在(現已洗掉的)評論中所建議的那樣,使用物件的克隆對我有用:
$newPeriod["start"] = clone end($newPeriods)["start"];
$newPeriod["end"] = clone end($newPeriods)["end"];
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532788.html
標籤:php数组约会时间
