2017-07-18 91 views
0

我一直在試圖創建一個簡單的前端到MySQL數據庫,該數據庫將顯示分爲幾年和幾個月目錄的表。PHP創建年份和月份的多層數組

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

喜歡的東西:

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]); 
    } 
} 
+0

給我們一些有關你的表在MySQL中的信息。以及你如何實際檢索它們。 – Doomenik

+0

您必須向我們顯示您的代碼。 – mickmackusa

+0

我已經添加了一些關於表格的更多信息,以及如何創建僅有關年份的數組(如果這很有用)。 – Edward1442

回答

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

然後,我不得不做一個相同的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語句似乎過度和不必要的。

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; 
} 

我希望這會有所幫助。