很好地显示多维数组


Displaying multi-dimensional array nicely

我目前正在制作一个个人网站,可以很好地展示我自己的电影/节目。

我创建了一个多维数组,其中包含阵列->季->集(信息)

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [episode] => 1
                    [ep_id] => 1
                    [ep_title] => Days Gone Bye
                    [ep_runtime] => 67 min
                )
            [1] => Array
                (
                    [episode] => 2
                    [ep_id] => 14
                    [ep_title] => Days Gone Bye
                    [ep_runtime] => 67 min
                )
        )
    [2] => Array
        (
            [0] => Array
                (
                    [episode] => 2
                    [ep_id] => 12
                    [ep_title] => Days Gone Bye
                    [ep_runtime] => 67 min
                )
            [1] => Array
                (
                    [episode] => 3
                    [ep_id] => 13
                    [ep_title] => Days Gone Bye
                    [ep_runtime] => 67 min
                )
        )
)

使用的代码:

while ($row = $res->fetch_object())
{
    $season = $row->season;
        $episodeArr[$season][] = array(
            'episode' => $row->episode,
            'ep_id' => $row->ep_id,
            'ep_title' => $row->ep_title,
            'ep_runtime' => $row->ep_runtime
        );
}

现在我想循环它,这样我就可以用html很好地显示它了。就像这样:

<div>
    <p>Season: 1</p>
    <div>
        <a href="overview.php?id="1">
        <p>Episode: 1</p>
        <p>Title: </p>
        <p>Runtime: </p>
        <a href="overview.php?id="2">
        <p>Episode: 2</p>
        <p>Title: </p>
        <p>Runtime: </p>

    </div>
</div>
    <div>
    <p>Season: 2</p>
    <div>
        <a href="overview.php?id="3">
        <p>Episode: 1</p>
        <p>Title: </p>
        <p>Runtime: </p>
        <a href="overview.php?id="4">
        <p>Episode: 2</p>
        <p>Title: </p>
        <p>Runtime: </p>

    </div>
</div>

我试着用foreach循环来学习各种教程。但我最终把所有信息都打印在一个字符串中。这并不可取。

foreach ($episodeArr as $seasons)
{
    foreach ($seasons as $episodes)
    {
        foreach ($episodes as $key => $episode)
        {
            echo $key . $episode;
        }
    }
}

您将在一个字符串中打印所有信息。只有您的单个字符串应该看起来像您文章中的HTML代码。

让我们这样想吧,你希望每一集都有这个HTML。

<div>
    <a href="overview.php?id="'. $episode['id'] .'">
    <p>Episode:</p>
    <p>Title: </p>
    <p>Runtime: </p>
</div>

每个季节都需要这个包装部件:

<div>
    <p>Season:</p>
    ...
</div>

现在想想你的循环是这样的:

foreach ($episodeArr as $seasons)
{
    // this works once for each season
    foreach ($seasons as $episode) // note that it's not $episodes but $episode
    {
        // this works once for each episode
        foreach ($episode as $key => $field) // note that it's not $episode but $field
        {
            // this works once for each field of an episode
            echo $key . $episode;
        }
    }
}

现在你需要呼应每个季节的包装部分:

foreach ($episodeArr as $seasons)
{
    echo '<div>';
    echo '    <p>Season:</p>';
    //        ... (The inner part)
    echo '</div>';
}

每集的内部:

foreach ($episodeArr as $seasons)
{
    echo '<div>';
    echo '    <p>Season:</p>';
    foreach ($seasons as $episode) // note that it's not $episodes but $episode
    {
        echo '<div>';
        echo '    <a href="overview.php?id="'. $episode['id'] .'">';
        echo '    <p>Episode:</p>';
        echo '    <p>Title: </p>';
        echo '    <p>Runtime: </p>';
        echo '</div>';
    }
    echo '</div>';
}

现在您需要在代码中填写其他字段。让我们把它们放在循环中合适的位置:

foreach ($episodeArr as $seasons)
{
    echo '<div>';
    echo '    <p>Season:</p>';
    foreach ($seasons as $episode) // note that it's not $episodes but $episode
    {
        echo '<div>';
        echo '    <a href="overview.php?id="'. $episode['id'] .'">';
        echo '    <p>Episode: '. $episode['ep_id'] .'</p>';
        echo '    <p>Title: '. $episode['ep_title'] .'</p>';
        echo '    <p>Runtime: '. $episode['ep_runtime'] .'</p>';
        echo '</div>';
    }
    echo '</div>';
}

现在,您的代码不会在HTML标记之间放置换行符,因此输出将不可读。您可以通过相应地放置一条换行符("'n")来解决此问题,如下所示:

echo '<div>'."'n";

请注意,我一直在为打印的每一行使用echo,以便能够轻松地解释我正在做的事情。php中有更方便的输出方式。您可能需要查找"php中的字符串串联"answers"heredocs"。你应该可以在这里找到信息。

看来我终于能够回答自己的问题了。

对于任何好奇的人来说,这就是我的解决方案:

foreach ($episodeArr as $key => $val)
{
    print "Season: $key <br>'n";
    foreach ($val as $key2 => $episodes)
    {
        echo 'ep_id ' . $episodes['ep_id'] . '<br>';
        echo 'episode ' . $episodes['episode'] . '<br>';
        echo 'ep_title ' . $episodes['ep_title'] . '<br>';
        echo 'ep_plot ' . $episodes['ep_plot'] . '<br>';
        echo 'ep_poster ' . $episodes['ep_poster'] . '<br>';
        echo 'ep_runtime ' . $episodes['ep_runtime'] . '<br><br>';
    }
}

又快又脏,但它有效。