簡體   English   中英

PHP foreach沒有獲取數組的最后一個值

[英]PHP foreach not getting last values of array

我有一個腳本,需要在(星期一至星期四)和(星期五至星期日)之間分隔月份。

我正在使用一個函數來創建一個范圍內所有日期的數組,然后循環遍歷該數組以分隔日期。

function createDateRangeArray($strDateFrom,$strDateTo){
    $aryRange=array();

    $iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),     substr($strDateFrom,8,2),substr($strDateFrom,0,4));
    $iDateTo=mktime(1,0,0,substr($strDateTo,5,2),     substr($strDateTo,8,2),substr($strDateTo,0,4));

    if ($iDateTo>=$iDateFrom)
    {
        array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry
        while ($iDateFrom<$iDateTo)
        {
            $iDateFrom+=86400; // add 24 hours
            array_push($aryRange,date('Y-m-d',$iDateFrom));
        }
    }
    return $aryRange;
}

$date = "2013-07-01";
$end_date = "2013-07-31";
$date_range = createDateRangeArray($date, $end_date);

$final_array = array();
$temp_array = array();

foreach ($date_range as $value) {
    $temp_array[] = $value;
    $day_of_week = date("N", strtotime($value));

    if ($day_of_week == 4 || $day_of_week == 7) {
        $final_array[] = $temp_array;
        $temp_array = array();
    }

}

當我執行print_r($ date_range)時,我得到:

Array
(
    [0] => 2013-07-01
    [1] => 2013-07-02
    [2] => 2013-07-03
    [3] => 2013-07-04
    [4] => 2013-07-05
    [5] => 2013-07-06
    [6] => 2013-07-07
    [7] => 2013-07-08
    [8] => 2013-07-09
    [9] => 2013-07-10
    [10] => 2013-07-11
    [11] => 2013-07-12
    [12] => 2013-07-13
    [13] => 2013-07-14
    [14] => 2013-07-15
    [15] => 2013-07-16
    [16] => 2013-07-17
    [17] => 2013-07-18
    [18] => 2013-07-19
    [19] => 2013-07-20
    [20] => 2013-07-21
    [21] => 2013-07-22
    [22] => 2013-07-23
    [23] => 2013-07-24
    [24] => 2013-07-25
    [25] => 2013-07-26
    [26] => 2013-07-27
    [27] => 2013-07-28
    [28] => 2013-07-29
    [29] => 2013-07-30
    [30] => 2013-07-31
)

但是,當我通過上面的foreach循環運行它時,它將捕獲除月末最后幾天以外的所有內容。 如果我運行print_r($ final_array),我會得到:

Array
(
    [0] => Array
        (
            [0] => 2013-07-01
            [1] => 2013-07-02
            [2] => 2013-07-03
            [3] => 2013-07-04
        )

    [1] => Array
        (
            [0] => 2013-07-05
            [1] => 2013-07-06
            [2] => 2013-07-07
        )

    [2] => Array
        (
            [0] => 2013-07-08
            [1] => 2013-07-09
            [2] => 2013-07-10
            [3] => 2013-07-11
        )

    [3] => Array
        (
            [0] => 2013-07-12
            [1] => 2013-07-13
            [2] => 2013-07-14
        )

    [4] => Array
        (
            [0] => 2013-07-15
            [1] => 2013-07-16
            [2] => 2013-07-17
            [3] => 2013-07-18
        )

    [5] => Array
        (
            [0] => 2013-07-19
            [1] => 2013-07-20
            [2] => 2013-07-21
        )

    [6] => Array
        (
            [0] => 2013-07-22
            [1] => 2013-07-23
            [2] => 2013-07-24
            [3] => 2013-07-25
        )

    [7] => Array
        (
            [0] => 2013-07-26
            [1] => 2013-07-27
            [2] => 2013-07-28
        )

)

更奇怪的是,當我將日期范圍更改為(2013-06-01至2013-06-30)或(2013-08-01至2013-08-31)時,它將所有日期都以$ final_array的方式吐出應該的。

我的思維過程是您錯過了重新添加$temp_array的最后一步,因為您還沒有完全達到47標記。 它可以與其他日期一起使用,因為星期幾設置得很好。

嘗試通過在foreach之后添加數組(如果不為空)進行確認:

foreach ($date_range as $value) {
    $temp_array[] = $value;
    $day_of_week = date("N", strtotime($value));

    if ($day_of_week == 4 || $day_of_week == 7) {
        $final_array[] = $temp_array;
        $temp_array = array();
    }

}

if ( count( $temp_array ) > 0 ){ // anything leftover?
    $final_array[] = $temp_array; // append to $final_array
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM