PHP创建多年和多月的多层数组

时间:2017-07-18 11:31:42

标签: php arrays multidimensional-array

我一直在尝试为MySQL数据库创建一个简单的前端,它将显示分成几年和几个月的目录的表。

我想要的是一系列年份,每年都有一个月的子数组,每个月都有一个表名的子数组,其日期列中包含该年份和月份。

类似的东西:

  

2017 {   
01 {   
Table01   
TABLE02   
}   
02 {   
Table03   
Table04   
}   
}

创建这种数组结构的最佳方法是什么?我对多级数组没有多少经验。

我已经有一个只有MySQL表中的年份的简单数组,所以我只需要添加几个月,然后在之后添加表名。

MySQL中的每个表都名为_ProductID,ID为六位数字。它包含给定月份的该产品的所有订单的列表。因此,对于2017年1月,ID /表名称可能是_123456,但对于2月份,它将是_123457。

每个表都有一个日期格式为YYYY-MM-DD的Ordered_On列,所以我选择了一个运行所有表的foreach语句的年份:

foreach($tables as $table) {
    $year = mysqli_query($connect, "SELECT ORDERED_ON FROM $table LIMIT 1")
    ->fetch_array()[0];

    if(!in_array(explode('-', $year)[0], $years, true)) {
        array_push($years, explode('-', $year)[0]);
    }
}

2 个答案:

答案 0 :(得分:1)

你应该利用“strtotime”,这是PHP内部非常强大的功能。它允许您转换日期并使用date()函数对其进行操作,如下所示。 最重要的是,PHP关联数组非常容易动态创建。由于您一次只添加一个元素,因此不需要array_push。

foreach($tables as $table) {
   $year = mysqli_query($connect, "SELECT ORDERED_ON FROM $table LIMIT 1")
->fetch_array()[0];

    $year = date("Y",strtotime($year));
    $month = date("m",strtotime($year));

    $years[$year][$month][] = $table;
}

我希望这会有所帮助。

答案 1 :(得分:0)

我设法弄清楚如何实现我想要的。我首先运行mysqli_query来收集所有表名并将它们添加到数组中,然后我使用foreach循环遍历每个表并将其添加到整个日期数组中:

$structure = [];

foreach($wowcherTables as $tableName) { 
    $redeemed = mysqli_query($connect, "SELECT Redeemed_At FROM wowcher.$tableName LIMIT 1")
                ->fetch_array()[0];

    $year = explode('-', $redeemed)[0];
    $month = explode('-', $redeemed)[1];

    $structure[$year][$month] = array();
}

第一个foreach语句从每个表的第一行获取年份和月份,并在$ structure数组中创建它们作为层。

然后,我必须使用array_push将相同的foreach语句添加到数组中,因为出于某种原因,当我在单个foreach中使用array_push时,每个月只会添加一个表名。

foreach($wowcherTables as $tableName) { 
    $redeemed = mysqli_query($connect, "SELECT Redeemed_At FROM wowcher.$tableName LIMIT 1")
                ->fetch_array()[0];

    $year = explode('-', $redeemed)[0];
    $month = explode('-', $redeemed)[1];

    array_push($structure[$year][$month], $tableName);
}

如果有人可以向我解释发生这种情况的原因以及更有效的方法来添加表格,那将非常有用,因为有两个相同的foreach语句似乎过多且不必要。