2013-07-08 5 views
-3

В принципе, я пытаюсь просмотреть все сообщения и найти их соответствующие теги. Переменная $ id представляет собой массив всех возвращаемых идентификаторов. Таким образом, первый цикл цикла должен находить все теги для сообщений, а если нет для этого сообщения, установите теги на 0 (для $ post_tags ['НАСТОЯЩИЙ ИДЕНТИФИКАТОР]]Цитирование через многомерные ассоциативные массивы и вывод результатов

Все это кажется чтобы быть в порядке, если нет тегов для сообщения, и он просто будет печатать «Нет указанных тегов» один раз рядом с ним (как и ожидалось). Но, похоже, что печатные теги - это все теги из соответствующего сообщения PLUS, из тех, которые были возвращены предыдущими сообщениями. Кажется, это добавление к тому, что уже было возвращено.

Я честно не понимаю, почему это делается и учитывая, что ошибки не возникает. Мне трудно адресовать. Любая помощь или руководство будут очень благодарны!

if($stmt = $mysqli->prepare("SELECT username, avatar FROM members WHERE id = ? LIMIT 1")){       
// Get the posts tags 
if($tgs = $mysqli->prepare("SELECT tag FROM tags WHERE post_id = ?")){ 
    for($i = 0; $i < count($id); $i++){ 
     $tgs->bind_param('i', $id[$i]); 
     $tgs->execute(); 
     $tgs->store_result(); 
     $tgs->bind_result($tag); 
     while($tgs->fetch()){ 
      $tags[] = $tag; 
     } 
     if($tgs->num_rows > 0){ 
      $post_tags[$id[$i]] = $tags; 
     }else{ 
      $post_tags[$id[$i]] = 0; 
     } 
    } 
    $tgs->close(); 
    for($i = 0; $i < count($id); $i++){    
     $stmt->bind_param('i',$by[$i]); 
     $stmt->execute(); 
     $stmt->store_result(); 
     $stmt->bind_result($username, $avatar); 
     $stmt->fetch(); 
     echo '<ul class="f_ul_subject" style="margin-top:3px"> 
        <li class="f_cat_subject" style="font-size:10px;line-height:12px;">'; 
          for($j = 0; $j < count($post_tags[$id[$i]]); $j++){ 
           if($post_tags[$id[$i]] != 0){ 
            echo '<a class="post_tag" href="http://localhost/Site/NetPerry/forum/search.php?v=' . $post_tags[$id[$i]][$j] . '&amp;tags=true"> 
              <span>' . $post_tags[$id[$i]][$j] . '</span> 
             </a>'; 
           }else{ 
            echo 'No specified tags'; 
           } 
          } 
        echo '</li> 
       </ul>              
      </li>'; 
    } 
} 

}

+0

'$ теги [] = $ тег,' проблема –

+1

Конечно, слишком локализованы вопрос «найти меня ошибка в моей код". –

+0

Спасибо за ответ, он сделал шаг в правильном направлении и, похоже, сейчас работает. Хотя не было никакого обязательства отвечать, если вы не почувствовали, что «найти меня в моем коде» было подходящим для этого сайта, у вас не было помощи. Хотя, спасибо, что вы это сделали. – iyop45

ответ

1

$tags[] = $tag; заполняется массив никогда не опорожнять его. Вот почему теги продолжают накапливаться. Вы можете решить эту проблему, объявив массив пустой, прежде чем принести петлю, как это:

$tags = array(); 
while($tgs->fetch()){ 
... 
+0

Интересно, почему этот ответ был принят, поскольку он не поможет? –

+0

@YourCommonSense заботиться о разработке? Я не понимаю, почему – thibauts

+0

Возможно, я ошибаюсь. Я не думал, что будет отдельный запрос для каждого сообщения. –