如何在PHP中循环关联数组?

时间:2014-12-29 16:08:29

标签: php arrays foreach associative-array

让我们假设我有以下内容:

$times = array();
    for($month = $current_month; $month <= $end_month; $month++) {
        $first_minute = mktime(0, 0, 0, $month, 1);
        $last_minute = mktime(23, 59, 0, $month, date('t', $first_minute));
        $times[$month] = array($first_minute, $last_minute);
    }

我现在需要遍历所有$months,但我不确定如何实现这一目标。

我尝试了foreach(),但这要求我输入一个月的价值。我们假设价值不明确。

3 个答案:

答案 0 :(得分:0)

你的意思是你需要遍历$times吗?

一个简单的foreach会......

foreach ($times as $month => $mins) {
  // $month = the month
  // $mins[0] = first minute
  // $mins[1] = last minute
}

答案 1 :(得分:0)

可以尝试使用foreach()这样的

foreach($times as $month=>$val){
    echo 'Month: ' .  $month . ' ';
    echo 'First Minute: ' . $val[0] . ' ';
    echo 'last Minute: ' . $val[1];
    echo '<br />';
}

答案 2 :(得分:0)

也许您应该使用Datetime代替?

$end_month = 12;
$times = [];
$oneMonth = new DateInterval('P1M');
$dt = new Datetime('midnight first day of'); // 2014-12-01T00:00:00+00:00

while($dt->format('m') <= $end_month) {
    $firstSecond = $dt->getTimestamp();
    $dt->add($oneMonth); // 2015-01-01T00:00:00+00:00
    $lastSecond = $dt->getTimestamp() -1;

    $times[$dt->format('m')] = [$firstSecond, $lastSecond];
}

foreach ($times as $month => $seconds) {
    // ...
}

但是你只能使用Datetime对象:

while($dt->format('m') <= $end_month) {
    $times[] = clone $dt;
    $dt->add($oneMonth);
}

foreach ($times as $month) {
    echo $month->format('m'), // 12
         $month->getTimestamp();
}