Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menggabungkan baris tabel dengan array PHP?

Saya menggunakan teknik 'baca dulu' untuk memproses loop bersarang. Ini berarti bahwa loop 'foreach' tidak dapat digunakan karena record berikutnya harus dibaca segera setelah record yang sekarang diproses. Pada dasarnya, tindakan terakhir yang Anda lakukan dalam loop adalah membaca catatan berikutnya saat Anda mengaturnya untuk iterasi berikutnya. Catatan, Anda tidak pernah menguji kapan harus mencetak catatan karena itu ditentukan oleh struktur grup. Loop kode sama dengan struktur grup dalam data

'Grup' adalah semua catatan dengan id yang sama .

Saya berasumsi bahwa 'isi' dan 'tindakan' identik untuk setiap entri dalam grup.

Diedit untuk menambahkan atribut 'rowspan' ke tag 'td' yang sesuai. Saya menduga css mungkin lebih mudah saat ini.

Masalahnya adalah bahwa grup tidak dapat ditampilkan sampai diketahui berapa banyak entri di dalamnya.

Jadi, saya 'menyangga' semua catatan milik grup dalam sebuah array. di akhir grup, itu ditampilkan dengan atribut 'rowspan' yang sesuai di html.

Ini diuji pada PHP 5.3.18. Ini termasuk data pengujian.

<?php /* Q24028866 */
$testData = array(array('id' => 2, 'date' => '05/13/2014', 'content' => 'some contents 2', 'act' => 'act1 act2 act3'),
                  array('id' => 2, 'date' => '05/28/2014', 'content' => 'some contents 2',  'act' => 'act1 act2 act3'),
                  array('id' => 7, 'date' => '06/04/2014', 'content' => 'some contents 7',  'act' => 'act1 act2 act3'),
                  array('id' => 8, 'date' => '06/08/2014', 'content' => 'some contents 8',  'act' => 'act1 act2 act3'),
                  array('id' => 8, 'date' => '06/09/2014', 'content' => 'some contents 8',  'act' => 'act1 act2 act3'));
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<table border='1'>
<thead><th>Date</th><th>Content</th><th>Act</th></thead>
<?php
// use 'read ahead' so there is always a 'previous' record to compare against...
$iterContents = new \ArrayIterator($testData);
$curEntry = $iterContents->current();

while ($iterContents->valid()) { // there are entries to process

    $curId = $curEntry['id'];

    // buffer the group to find out how many entries it has...
    $buffer = array();
    $buffer[] = $curEntry;

    $iterContents->next(); // next entry - may be same or different id...
    $curEntry = $iterContents->current();

    while ($iterContents->valid() && $curEntry['id'] == $curId) {  // process the group...
        $buffer[] = $curEntry; // store all records for a group in the buffer

        $iterContents->next(); // next entry - may be same or different id...
        $curEntry = $iterContents->current();
    }

     // display the current group in the buffer...
     echo '<tr>';
     echo '<td>', $buffer[0]['date'], '</td>';
     $rowspan = count($buffer) > 1 ? ' rowspan="'. count($buffer) .'"' : '';
     echo '<td', $rowspan, '>', $buffer[0]['content'], '</td>',
           '<td', $rowspan, '>', $buffer[0]['act'], '</td>';
     echo '</tr>';
     for($i = 1; $i < count($buffer); $i++) {
          echo '<tr><td>', $buffer[$i]['date'], '</td>';
          echo '</tr>';
     }
} ?>
</table>
</body>
</html>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Alokasi memori MySQL TEXT

  2. KESALAHAN 1356 (HY000):Lihat referensi 'mysql.user' tabel atau kolom atau fungsi yang tidak valid atau definisi/pemanggil tampilan tidak memiliki hak untuk menggunakannya

  3. Flask SQLAlchemy tidak menutup koneksi database MySQL

  4. MySQL DROP COLUMN

  5. Bagaimana menemukan nama tabel yang gambarnya dipilih secara acak?