PHP foreach循环返回一个返回相同数据的倍数的数组

时间:2012-01-24 06:55:07

标签: php mysql

我有一个名为'section_remember'的会话变量数组,其中包含2个值。 我期待下面的代码产生一个“print_r”并给我两个div(数组中的每个值一个)。

相反,它会执行2个print_r并给我4个div,如果这有意义的话。

如果数组中有3个值,则运行循环3次,得到3个print_r和9个div。依此类推,具体取决于数组中的值的数量。

我不明白为什么会这样做,但我是PHP的新手,所以我希望它是显而易见的。

<?php
    print_r($_SESSION['section_remember']);

        foreach($_SESSION['section_remember'] as $key =>$value)
        {       
        $sql = "SELECT `section`.`start`,`section`.`stop`,`section`.`title`,`daily_show`.`audio_file`
            FROM `section`
            INNER JOIN `daily_show`
            ON `section`.`daily_show_id` = `daily_show`.`id`
            WHERE `section`.`id` = $value";
        $result = mysql_query($sql);

        while ($query = mysql_fetch_array($result))
        {       
            $title = $query['title'];
            $seconds = $query['seconds'];
            $duration = gmdate ('i:s', $seconds); //'H:i:s' for hours

            echo "<div><span class='duration'>".$duration."</span>".$title."</div>";        
        }   
        }
    ?>

3 个答案:

答案 0 :(得分:1)

看到print_r()调用在循环之外,你得它输出三次,这意味着它在一个更大的循环内(或者说,一个函数被调用三次)。您发送的代码不应该归咎于此。

答案 1 :(得分:0)

代码中print_r和foreach循环之间没有关系。

Foreach循环将输出2个div(因为有2个值),并将在print_r结果后回显它。

print_r的目的是什么?如果你想让值在其中,你需要在循环中创建另一个数组,然后才使用print_r($ arr)....它就是这样做的。

P.S。对于索引,可以在循环外分配$ i = 0,在循环结束前分配$ i ++。

我现在在移动设备上。如果你没有得到它,请告诉我,我会在你自己的代码片段中插入它。

答案 2 :(得分:0)

您似乎正在打印并回显相同的信息。

也许如果您通过评论第一个print_r声明来尝试它。

//print_r($_SESSION['section_remember']);

        foreach($_SESSION['section_remember'] as $key =>$value)
        {       
        $sql = "SELECT `section`.`st