PHP条件组合数组


PHP Conditionally Combining Arrays

我正在循环当前月份的一个天数数组,以生成另一个在当前日期当天或之后的天数数组。下个月我也会这样做(这将始终包括当前日期之后的所有日子)。

复杂性在于下一个月与当前月份在不同的年份。最终数组的格式如下:

array("year" => array("month" => array(days)));

当两个月都在同一年时,它可能看起来是这样的:

$allDays = array("2013" => array( "11" => array(28,29,30), "12" => array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31)));

当这两个月在不同的年份(即12月和1月)时,它可能看起来像这样:

$allDays = array("2013" => array("12" => array(2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31)), "2014" => array("1" => array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31) )) ;

这是我的代码,它生成当前月份和下个月的日期列表:

// Set the default timezone
    date_default_timezone_set('Australia/Sydney');
    // Get days for current month
    $day = date("Y-m-d");
    $i = strtotime($day);
    array("year" => array("month" => array(days)));
    $linked_days = array(
        date('Y', $i) => array(
            date('m') => range(date('d', $i), intval(date('t'))),
        ),
    );
    // Get days for next month
    $day2 = date("Y-m-d", strtotime('first day of next month')) ;
    $i2 = strtotime($day2);
    array("year" => array("month" => array(days)));
    $linked_days2 = array(
        date('Y', $i2) => array(
            date('m') => range(date('d', $i2), intval(date('t'))),
        ),
    );

我不知道如果它们在同一年或不在同一年份,如何将它们与不同的sytanx组合成1数组?

您可以使用isset函数检查数组中是否已经存在年份条目:

更改此

$day2 = date("Y-m-d", strtotime('first day of next month')) ;
$i2 = strtotime($day2);
array("year" => array("month" => array(days)));
$linked_days2 = array(
    date('Y', $i2) => array(
        date('m') => range(date('d', $i2), intval(date('t'))),
    ),
);

$day2 = date("Y-m-d", strtotime('first day of next month')) ;
$i2 = strtotime($day2);
array("year" => array("month" => array(days))); //useless line ??
if(!isset($linked_days[date('Y', $i2)])){
    //if no entry for this year in array, create new entry
    $linked_days[date('Y', $i2)] = array(date('m') => range(date('d', $i), intval(date('t'))));
}
else{
    //else, just add the month entry
    $linked_days[date('Y', $i2)][date('m')] = range(date('d', $i2), intval(date('t'))) ;
}