使用PHP和mysql动态构建表

时间:2012-08-02 16:57:49

标签: php mysql html-table

我一直在阅读一些q& a但仍未设法构建我的算法,所以我要求提供一些关于如何做的帮助/建议。

所以,我有一个MySQL表,并且对于每个mysql表行,我想在表中显示它。我希望我的表只有4个cols(意味着行数根据数据库中的数据而变化)。因此,在html表中(第1行,第1列)将是来自db表第1行的数据,html(第1行,第2列)数据来自db表第2行...(第2行,第1列)数据来自db表第5行等等。

因此,该表将类似于:

  

[来自db row#1的数据] [来自db row#2的数据] [来自db row#3的数据] [来自db row#4的数据]

     

[来自db row#5的数据] [来自db row#6的数据] [来自db row#7的数据] [来自db row#8的数据]

     

依旧......

这是我从db获取数据的原因:

function get_albums() {
    $albums = array();

    $albums_query = mysql_query("SELECT 'albums'.'album_id', 'albums'.'role_id', 'albums'.'timestamp', 'albums'.'name', LEFT('albums'.'description',50) as 'description', COUNT('images'.'image_id') as 'image_count'
    FROM 'albums'
    LEFT JOIN 'images'
    ON 'albums'.'album_id' = 'images'.'album_id'
    GROUP BY 'albums'.'album_id'");

    // Loop through all images
    while ($albums_row = mysql_fetch_assoc($albums_query)) {
        // multidimensional array
        $albums[] = array(
                    // associative array
                    'id' => $albums_row['album_id'],
                    'role' => $albums_row['role_id'],
                    'timestamp' => $albums_row['timestamp'],
                    'name' => $albums_row['name'],
                    'description' => $albums_row['description'],
                    'image_count' => $albums_row['image_count']
        );
    }   
    return $albums;
}

显示该信息:

$albums = get_albums();

echo '<table>';
for ($i=0; $i<(count($albums)/4); $i++) {
    echo '<tr>';

    //HERE IS WHERE I'M LOST

    foreach ($albums as $album) {
        echo '<a href="view_album.php?aid=',$album['id'],'">',$album['name'],'</a> (',$album['image_count'],') image(s)<br />',$album['description'],'...';

    }
    echo '</tr>';
}
echo '</table>';

那么,有什么想法吗?

1 个答案:

答案 0 :(得分:3)

// keep calculations outside of the for loop if you can

// this will display all albums (count($albums) / 4) times.

$limit = count($albums) / 4;
for ($i = 0; $i < $limit; $i++) {
    echo '<tr>';

    foreach ($albums as $album) {
        echo '<td><a href="view_album.php?aid=' . 
            $album['id'] . '">' . $album['name'] . '</a> (' . 
            $album['image_count'] . ') image(s)<br />' . 
            $album['description'] . '...</td>';
    }
    echo "</tr>";
}

您可能正在寻找的是

<?php
$counter = 0;

foreach($albums as $album) :
    // start new row 
    if ($counter == 0): ?>
        <tr>
    <?php endif; ?>
    <td><a href="view_album.php?aid=<?= $album['id'] ?>"><?= $album['name'] ?></a> (<?= $album['image_count'] ?>) image(s)<br />         
        <?= $album['description'] ?>...</td>
    <?php if ($counter++ == 3) : ?> <!-- 4 records printed in row; end row & reset counter -->
        </tr>
    <?php
        $counter = 0;
    endif;
endforeach;

$lastCount = $counter;
// print remaining empty cells
while ($counter ++ < 4) : ?>
    <td>&nbsp;</td>
endwhile;
// close row if necessary
if ($lastCount != 3) :
    </tr>
endif;