0

我正在尝试构建一个显示书籍信息的简单页面,我打算将其全部存储在数据库中,但我决定构建一个多维数组并将其存储在其中会更好。

下面的示例中只有 4 本书,但最终可能会达到 100 本书。

我需要帮助迭代这个数组并在 HTML 中显示每个项目,<li>但我只需要连续显示 4 个然后开始新行。有人可以告诉我如何做到这一点吗?

<?php
$books = array(
        1 => array(
            'name' => 'book 1 name here',
            'url' => '',
            'big_photo' => 'big photo of book 1',
            'small_photo' => 'small photo of book 1',
            'bio' => 'short bio 1'
            ),
        2 => array(
            'name' => 'book 2 name here',
            'url' => '',
            'big_photo' => 'big photo of book 2',
            'small_photo' => 'small photo of book 2',
            'bio' => 'short bio 2'
            ),
        3 => array(
            'name' => 'book 3 name here',
            'url' => '',
            'big_photo' => 'big photo of book  3',
            'small_photo' => 'small photo of book 3',
            'bio' => 'short bio 3'
            ),
        4 => array(
            'name' => 'book 4 name here',
            'url' => '',
            'big_photo' => 'big photo of book 4',
            'small_photo' => 'small photo of book 4',
            'bio' => 'short bio 4'
            )
);

echo $books["1"]["small_photo"];
?>

示例输出

<ul>
    <li>books data</li>
    <li>books data</li>
    <li>books data</li>
    <li class="lastRow">books data</li>
    <li>books data</li>
    <li>books data</li>
    <li>books data</li>
    <li class="lastRow">books data</li>
    <li>books data</li>
    <li>books data</li>
    <li>books data</li>
    <li class="lastRow">books data</li>
</ul>
4

3 回答 3

2

自从我编写任何 PHP 以来已经有一段时间了,但应该这样做:

$numBooks = count($books);
$j = 0
for ($i = 0; $i < $numBooks; i+=4)
{
    for ($j = $i; $j < $i + 4; $j < $numBooks; ++$j)
    {
        if ($j == 3)
        {
            echo '<li class="lastRow">' . $books[$j]["name"] . "</li>";
        }
        else
        {
            echo "<li>" . $books[$j]["name"] . "</li>";
        }        
    }
    // do whatever you need to break the row here
    $i = $j; 
}

li就在单行上实际显示元素而言,您可能希望使用display:inlineinline-block在您的 css 中。 float:left也可以...尝试所有这些,看看哪种最适合您。

于 2012-04-11T02:41:47.363 回答
1
<?php

$perRow=4;
$i = 0;
foreach($books as $book){
    if($i === 0){
        echo '<div class="row">';
    }
        echo '<div>';
        echo $book['name']. '<br>';
        echo $book['url']. '<br>';
        echo $book['big_photo']. '<br>';
        echo $book['small_photo']. '<br>';
        echo $book['bio']. '<br><br><br>';
        echo '</div>';

    if($i === $perRow){
        $i = 0;
        echo '</div>';
    }else{
        $i++;
    }
}

?>
于 2012-04-11T03:09:40.667 回答
0

对行使用计数器并使用模数来决定何时在显示逻辑中中断行。

于 2012-04-11T02:31:49.633 回答