2017-07-18 14 views
0

私は、年月のディレクトリに分割されたテーブルを表示するMySQLデータベースへの単純なフロントエンドを作成しようとしています。PHP年と月の多層配列を作成する

私が望むのは、各年が月のサブ配列を持ち、毎月に日付の列にその年と月を持つテーブル名のサブ配列を持つ年配列です。

何か等:

2017 {
        01 {
                TABLE01
                Table02
       }
        02 {
                Table03
                Table04
       }
}

配列のこのような構造を作成するための最良の方法は何ですか?私は、マルチレベル配列に関する多くの経験がありません。

私は既にMySQLのテーブルで見つかった年だけの単純な配列を持っています。そのために月を追加し、その後にテーブル名を追加する必要があります。

MySQLの各テーブルの名前は_ProductIDで、IDは6桁の数字です。これには、その月のその製品のすべての注文のリストが含まれています。したがって、2017年1月のID /テーブル名は_123456ですが、2月のID /テーブル名は_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文を取得します年、月を各テーブルの最初の行から削除し、それらを$構造配列内にレイヤーとして作成します。

なぜなら、私はちょうど単一のforeachでarray_pushを持っていた何らかの理由で、毎月1つのテーブル名が追加されるため、同じテーブル名を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連想配列は非常に簡単に作成することができます。一度に1つの要素しか追加しないので、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; 
} 

これが役立ちます。

関連する問題