我有一个名为'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>";
}
}
?>
答案 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