即使找不到月份,也需要数组包含循环中12个月的所有12个键


Need array to contain all 12 keys for the 12 months in loop even if month is not found

我理解basic arrays,但当它们变得更高级时,我会有点迷路。有人能帮我处理以下代码和array吗?

我正在将我的DB query存储到array中。如果所有12个月都不在DB中,那么这就是存储的全部内容(应该如此)。然而,我的问题是,我需要array拥有所有12个keys,这样我就可以打印出来。

// Example amounts
0, 0, 0, 0, 5.23, 0, 0, 158.35, 0, 0, 0, 0

基本上,如果它不存在,我仍然可以打印出当月的零。

这是我的代码:

$closedsales = mysqli_query($mysqli, "SELECT MONTH(date) as month, sum(amount) as total FROM sales WHERE user_id = '".$userid."' AND status = 'S' GROUP BY MONTH(date)");
    while ( $row = mysqli_fetch_assoc($closedsales) ) {
    $monthlysales[$row['month']] = $row['total'];
    }
       foreach($monthlysales as $key => $amount) {
         echo "$amount <br />";
       }

预填充结果数组:

$monthlysales = array_fill_keys(range(1, 12), 0);

然后运行循环,循环将用表中的行替换元素。如果表中缺少一行,则该行的初始值为0。

$allmonthlysales = array_fill_keys(range(1, 12), 0);
foreach($monthlysales as $month => $sales){
    $allmonthlysales[$month] = $sales;
}
var_dump($allmonthlysales);
  • Prepare and array with keys 1-12 and 0 as value means months without sales
  • 将具有销售额的月份的array与上面构建的空月份合并
  • 你得到了你需要的