替换而不是推送数组值

时间:2014-04-07 17:36:43

标签: php laravel

我正在尝试构建像array(years => array(months))这样的多维数组。添加到一年的每个新月都会替换年份数组中的旧月值,而不是附加值。

<?php 
$dates = array();
foreach (Blog::all() as $blog) {
    $date_year = date("Y", strtotime($blog->created_at));
    $date_month = date("F", strtotime($blog->created_at));
    if (!in_array($date_year, $dates)) {
        $dates[$date_year] = array();
    }
    if (!in_array($date_month, $dates[$date_year])) {
        $dates[$date_year][] = $date_month;
        print $date_year." ".$date_month."<br>";
    }
}
print_r($dates); ?>

输出:

Array ( [2009] => Array ( [0] => December ) [2010] => Array ( [0] => March ) [2011] => Array ( [0] => August ) [2012] => Array ( [0] => November ) [2013] => Array ( [0] => October ) [2014] => Array ( [0] => April ) )

显示的月份是每年可用的最后一个月。我也尝试使用array_push($dates[$date_year], $date_month)获得相同的结果。

1 个答案:

答案 0 :(得分:3)

每次都会覆盖年份数组:

if (!in_array($date_year, $dates)) {
    $dates[$date_year] = array();
}

使用array_key_exists检查数组键而不是数组值:

if (!array_key_exists($date_year, $dates)) {
    $dates[$date_year] = array();
}

或者,更好的是IMO,请按照下面的vp_arth建议使用isset。 (对于succintness。)

if (!isset($dates[$date_year])) {
    $dates[$date_year] = array();
}