在PHP中迭代一个多维数组

时间:2012-04-11 02:28:04

标签: php multidimensional-array

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

下面的示例中只有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>

3 个答案:

答案 0 :(得分: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元素而言,您可能希望在css中使用display:inlineinline-blockfloat:left也会奏效......全部尝试,看看哪种方式最适合你。

答案 1 :(得分: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++;
    }
}

?>

答案 2 :(得分:0)

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