我正在尝试创建一个年、月、日、小时的多维数组,以便我可以每小时跟踪某些数据。我试图通过嵌套 for 循环初始化这个数组,但似乎失败得很惨。
$Year = array();
//This starts in 2015 and works until 2018
for($z=0; $z < 3; ++$z)
{
$Month = array();
array_push($Year, $Month);
//Months
for($a=0; $a < 12; ++$a)
{
//Days
for($b=0; $b < GetDaysInMonth($a); ++$b)
{
$Day = array();
array_push($Month, $Day);
//Hours
for($c = 0; $c < 24; ++$c)
{
$Hours = array(0);
array_push($Day, $Hours);
}
}
}
}
目标是初始化一个大小为 24 的数组(表示小时),将其推入表示天的数组,将天数组推入月份,将月份数组推入年份。但每次我尝试访问数据时,它似乎都不存在。我在这里做错了什么?
每次
array_push
之后,您必须
for
$Years = array();
//This starts in 2015 and works until 2018
for($z=0; $z < 3; $z++) {
$Year = array();
//Months
for($a=0; $a < 12; $a++) {
$Month = array();
//Days
for($b=0; $b < GetDaysInMonth($a); $b++) {
$Day = array();
//Hours
for($c = 0; $c < 24; $c++) {
$Hours = $c;
array_push($Day, $Hours); // push Hours into Day
}
array_push($Month, $Day); // push Days into Month
}
array_push($Year, $Month); // push Months into Year
}
array_push($Years, $Year); // push each Year in a var with all Years
}
编辑:我添加了一个名为
$Years
的变量来存储所有年份
从 2015 年初到 2018 年全年,预计最深层有 35,064 个元素。这是相当大的内存消耗,您可能需要提高内存限制或更改策略。
至于生成带有索引级别的多维数组,您可以使用以下方法:(Demo)
$start = 2015;
$end = 2018;
$years = [];
foreach (range($start, $end) as $y) {
$months = [];
for ($m = 1; $m <= 12; ++$m) {
$lastDayOfMonth = date('t', strtotime("$y-$m-01"));
$days = [];
for ($d = 1; $d <= $lastDayOfMonth; ++$d) {
$days[] = range(0, 23);
}
$months[] = $days;
}
$years[] = $months;
}
var_export($years);
如果这是我的任务,我可能会在所有级别上使用更直观的键,并利用日期时间对象并在日期时间段内循环。 (演示)
$period = new DatePeriod(
new DateTime('2015-01-01'),
new DateInterval('P1D'),
new DateTime('2018-12-31'),
DatePeriod::INCLUDE_END_DATE
);
$years = [];
foreach ($period as $date) {
$years[$date->format('Y')][$date->format('m')][$date->format('d')] = range(0, 23);
}
var_export($years);