使用PHP循环数组

时间:2013-11-11 15:16:14

标签: php arrays for-loop

我想使用PHP从今天的日期开始填充数组,并在未来几天内填充。当我在下面尝试以下内容时,所有列都包含“2013-11-18”。我一直在玩它2个小时,但无济于事。我错过了什么?

//Get "Day 0", today if undefined
if(isset($_GET['DAY0']) == TRUE){
    $day0 = new DateTime($_GET['DAY0']);
} else {
    $day0 = new DateTime('today');
}

    // save day0 + 7 days into into dayArray
    $dayArray[0] = $day0;
    for($i=1; $i<8; $i++){
        $day0->modify('+1 day');
        $dayArray[i]= $day0;
    }

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

4 个答案:

答案 0 :(得分:2)

通过引用传递对象。您正在为数组中的同一对象分配多个引用。

如果你真的需要数组中的所有日期时间对象,你可以做这样的事情

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

$dayArray = [clone $start];

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

或者您可以按照已建议的方式存储格式化的日期。

$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');
}

答案 1 :(得分:0)

$dayArray[i]中的两个$dayArray[$i]替换为{{1}}

答案 2 :(得分:0)

您可以保存时间戳:

// save day0 + 7 days into into dayArray
$dayArray[0] = $day0->format('U');
for($i=1; $i<8; $i++){
    $day0->modify('+1 day');
    $dayArray[$i] = $day0->format('U');
}

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

答案 3 :(得分:0)

您可以像这样创建DatePeriod:

    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 "<tr>";
      foreach ($period as $datetime) {
         echo "<th>".datetime->format('Y-m-d')."</th>";

      }
    echo "</tr>";
相关问题