2012-01-24 6 views
0

У меня есть массив переменных сеанса, называемый «section_remember» с 2 значениями в нем. Я ожидаю, что приведенный ниже код приведет к одному «print_r» и даст мне два div (по одному для каждого значения в массиве).PHP foreach loop на массиве, возвращающем кратность тех же данных

Вместо этого он выполняет 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

Запишите полный запрос вместо $ sql = "SELECT blah blah blah ...."; –

+1

... и значение $ _SESSION ['section_remember'] –

+0

Похоже, вы включаете/запускаете этот скрипт несколько раз, так как 'print_r()' находится за пределами любых циклов, но вы видите его более одного раза. Если, конечно, ваш вопрос не является [коротким, самодостаточным, правильным примером] (http://sscce.org/) – Phil

ответ

1

Видя, что вызов print_r() находится за пределами цикла, и вы получите его на выход в три раза, это означает, что внутри большего цикла (или, скажем, функция вызывается в три раза). Код, который вы отправили, здесь не виноват.

+0

Спасибо за подтверждение, что это что-то еще на странице. Остальная часть кода представляет собой запутанную и плохо организованную mishmash jquery и PHP и не подходит для публикации. – JackBurton

0

В коде отсутствует связь между print_r и циклом foreach.

Цикл Foreach будет выводить 2 divs (так как есть 2 значения) и будет эхо-сигнал после результата print_r.

В чем заключается цель этого print_r? Если вы хотите, чтобы значения находились внутри него, вам нужно создать еще один массив внутри цикла, и только после этого используйте print_r ($ arr) ... Это трюк.

P.s. Для индексов вы можете назначить $ i = 0 вне цикла и $ i ++ непосредственно перед концом цикла.

Я нахожусь на мобильном телефоне прямо сейчас. Если вы этого не поняли, скажите мне, и я вложу это в свой собственный фрагмент кода, когда смогу.

0

Вы, кажется, печатаете и повторяете одну и ту же информацию.

Возможно, если вы попробовали это, комментируя первый номер print_r.

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

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