sql >> Database >  >> RDS >> Mysql

Hoe tabelrij samenvoegen met PHP-array?

Ik gebruik de 'read ahead'-techniek voor het verwerken van geneste lussen. Het betekent wel dat 'foreach'-loops niet kunnen worden gebruikt, omdat het volgende record moet worden gelezen zodra het huidige is verwerkt. Kortom, de laatste actie die u in de lus uitvoert, is het volgende record lezen terwijl u het instelt voor de volgende iteratie. Let op, u test nooit wanneer u een record moet afdrukken, omdat dat wordt bepaald door de structuur van de groepen. De codelussen zijn hetzelfde als de structuur van de groepen in de gegevens

Een 'groep' is alle de records met dezelfde id .

Ik ga ervan uit dat de 'inhoud' en 'act' identiek zijn voor elk item in de groep.

Bewerkt om 'rowspan'-kenmerken toe te voegen aan de juiste 'td'-tags. Ik vermoed dat css op dit moment misschien makkelijker is.

Het probleem is dat de groep pas kan worden weergegeven als bekend is hoeveel items er in zitten.

Dus ik 'buffer' alle records die tot een groep in een array behoren. aan het einde van de groep wordt deze weergegeven met de juiste 'rowspan'-attributen in de html.

Het is getest op PHP 5.3.18. Het bevat testgegevens.

<?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. Hoe een lege ResultSet van MySQL te detecteren?

  2. Afteltimer-php+mysql+js

  3. Hoe maak je verbinding met een MySQL-database met Oracle SQL Developer?

  4. Hoe toegang te krijgen tot een externe mysql-database met behulp van java