2016-12-18 7 views
0

私は1か月で出席テーブルを作成しようとしています。私はここでは、この結果にPHP&MySqlを使用して出席テーブルを作成する

Nik tanggal_absensi kodekehadiran NamaSiswa tanggal_absensi tanggal 
    1111  2016­12­18   H   Nama A  2016­-12-­18 18 
    1111  2016­12­19   I   Nama A  2016­-12-­19 19 
    123456  2016­12­18   H   ADI SURIONO 2016-­12-­18 18 
    123456 2016­12­19   H   ADI SURIONO 2016-­12-­19 19 

を取得し、私は私のクエリでこのクエリ

select d.Nik,d.tanggal_absensi,d.kodekehadiran,c.NamaSiswa,d.tanggal_absensi,day(d.tanggal_absensi) tanggal from absensi d left join mastersiswa c on d.NIK = c.NIK left join siswa_kelas z on d.Nik = z.NIK left join kelas a on a.ID = z.Kelas where a.ID = '1' and month(d.tanggal_absensi) = '12' GROUP BY d.Nik,d.tanggal_absensi,d.kodekehadiran,c.NamaSiswa,a.Kelas,d.tanggal_absensi,day(d.tanggal_absensi) 

を持って

にそれを確認してください、私はこの結果を得る私のHTML & PHP

<table width="100%" class="table table-bordered table-striped"> 
         <thead> 
          <tr align="center"> 
          <th width="6%">No</th> 
          <th width="19%">Nama</th> 
          <?php for($x=1;$x<=31;$x++){ ?><th><?php echo $x;?></th> <? } ?> 
          </tr> 
         </thead> 
         <tbody> 
         <? 
         $no = 0; 
         foreach($absensi as $tampil){ 
          $no++; 
         ?> 
          <tr> 
          <td><?=$no?></td> 
          <td><?=$tampil->NamaSiswa;?></td> 

          <?php for($x=1;$x<=31;$x++){ ?> 
           <td> 
            <?php if($tampil->tanggal == $x){echo $tampil->kodekehadiran;} ?> 
           </td> 
          <?php } ?>  
          </tr> 
          <?php } ?> 
         </tbody> 
        </table>  

です私のウェブサイト。

enter image description here

どのように私は達成することができますか?だから、私はそれを作成するためにPHPでforを使用してどのようにlist all day in a month

No Nama  1 - 2 - 3 - 4 - 5 - 18 19 - 20 - 21 - 22 
1 NAMA A - - - - - H I  - - - 
2 Nama B - - - - - I H  - - - 

だから、私は知りません。私の悪い英語のために申し訳ありません。

答えて

1

あなたはそれを行うことができますが、あなたのコード/ロジックの一部をリファクタリングする必要があります。

あなたがデータとして持っている:

<?php 
// Data from DB 
$data[] = ['Nik' => '111', 'tanggal_absensi' => '2016­12­18', 'kodekehadiran' => 'H', 'NamaSiswa' => 'Nama A'] 
$data[] = ['Nik' => '111', 'tanggal_absensi' => '2016­12­19', 'kodekehadiran' => 'I', 'NamaSiswa' => 'Nama A'] 
?> 

必要なもの - マルチレベルのデータ配列を

<?php 
$dataCalculated[111] = [ 
    '2016­12­18' => ['Nik' => '111', 'tanggal_absensi' => '2016­12­18', 'kodekehadiran' => 'H', 'NamaSiswa' => 'Nama A'], 
    '2016­12­19' => ['Nik' => '111', 'tanggal_absensi' => '2016­12­19', 'kodekehadiran' => 'I', 'NamaSiswa' => 'Nama A'] 
]; 
?> 

どうすればよいですか?各$データをループし、別の$ dataCalculated を作成します。これにはコードのロジックが含まれます。ここでは、ユーザーごとのすべての行(Nik)、 以降が表示されます。あなたは、これが最初の列とテーブルの ヘッダで見ることができるように:)

<?php 
$dataCalculated = []; 
foreach($data as $row) { 
    // We create the first array level, if this is the first time 
    if(!isset($dataCalculated[ $row['Nik'] ])) { 
    $dataCalculated[ $row['Nik'] ] = []; 
    } 
    // We fill the row data 
    $dataCalculated[ $row['Nik'] ][ $row['tanggal_absensi'] ] = $row; 
} 
?> 

あなたのHTML/PHPビューのコードをリファクタリング:

をした後、あなたは上のこの新しい配列に反復することができますHTMLファイル。

<?php for($x=1 ; $x<=31 ; $x++): ?> 
    <td> 
    <?php if(isset($dataCalculated[ $tampil->Nik ][ date('Y-m-d', mktime(0, 0, 0, '12', $x, '2016')) ])): ?> 
    <?php echo $dataCalculated[ $tampil->Nik ][ date('Y-m-d', mktime(0, 0, 0, '12', $x, '2016')) ]['kodekehadiran']; ?> 
    <?php endif; ?> 
    </td> 
<?php endfor; ?> 

は注意してください、私は(mktime - >月&年)手動でいくつかのデータを入力し

最終変更 - >重複行もちろん

、いくつかの行は有用ではないだろう今。ユーザーは1行だけ必要です。

  • ユーザーが既に表示されている場合は、行をスキップできます(変数と小切手が必要です。$previousNik)。:)(可変$dataUsers

    楽しんを

    <?php 
    $dataCalculated = []; 
    $dataUsers = []; 
    
    foreach($data as $row) { 
        // We create the first array level, if this is the first time 
        if(!isset($dataCalculated[ $row['Nik'] ])) { 
        $dataCalculated[ $row['Nik'] ] = []; 
        } 
        // We fill the row data 
        $dataCalculated[ $row['Nik'] ][ $row['tanggal_absensi'] ] = $row; 
        $dataUsers[ $row['Nik'] ] = ['Nik' => $row['Nik'], 'NamaSiswa' => $row['NamaSiswa']]; 
    } 
    ?> 
    

    そして、あなたのコードでそれを使用する:

  • また、すべてのユーザー

例のリストを別の配列を作成することができます!

+0

答えに感謝します。だから私は結果配列を最初に変更する必要がありますか? – YVS1102

+0

私はショットを与えるでしょう – YVS1102

+0

私はそれを置く場所がわからない:(。いくつかの試してみた後、データはまだ重複し、kodekehadiranは表示されませんでした – YVS1102

関連する問題