我正在尝试构建像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)
获得相同的结果。
答案 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();
}