簡體   English   中英

PHP創建年份和月份的多層數組

[英]PHP Create Multilayer array of years and months

我一直在嘗試為MySQL數據庫創建一個簡單的前端,該前端將顯示分為年月目錄的表。

我想要的是一組年份,每個年份都有一個子月份數組,每個月都有一個子表格名數組,其表的日期列中包含該年份和月份。

就像是:

2017 {
01 {
表01
表02
}
02 {
表03
表04
}
}

創建此數組結構的最佳方法是什么? 我對多層陣列沒有太多經驗。

我已經在MySQL表中找到了僅包含年份的簡單數組,因此我只需要在其中添加月份,然后在其后添加表名稱。

MySQL中的每個表都被命名為_ProductID,ID是一個六位數的數字。 它包含給定月份該產品所有訂單的列表。 因此,對於2017年1月,ID /表名稱可能是_123456,但是對於2月,ID /表名稱將是_123457。

每個表的確有一個Ordered_On列,其日期格式為YYYY-MM-DD,所以我要在所有表中運行帶有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]);
    }
}

您應該利用“ 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;
}

我希望這有幫助。

我設法弄清楚如何實現自己想要的目標。 我首先運行一個mysqli_query來收集所有表名並將它們添加到數組中,然后我使用了foreach循環遍歷每個表並將其添加到整個dates數組中:

$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數組中的圖層。

然后,我必須執行相同的foreach語句,以使用array_push將每個表名添加到數組中,因為由於某些原因,當我在單個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語句似乎是多余和不必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM