2013-03-18 5 views
0

Я ищу для создания таблицы HTML, как показано ниже.PHP вложенные петли foreach для отображения таблицы

|nick_name| bookmarked_sites | 
------------------------------- 
| admin | http://test1.com | 
|   | http://test2.com | 
|   | http://test3.com | 
------------------------------- 
| John | http://mysite.com | 
------------------------------- 

Я запрос к базе данных, используя $ wpdb и строит массив информации, которая выглядит следующим образом:

$userquery = $wpdb->get_results("SELECT * FROM bookmarks"); 
print_r($userquery); 

Array ( 
[0] => stdClass Object ( 
    [id] => 1 [user_id] => 1 [post_id] => 1654,1532,1672,1610,1676) 
[1] => stdClass Object ( 
    [id] => 3 [user_id] => 6 [post_id] => 1680,1654)) 

я начал строить свой первый foreach извлечь user_id, то у меня было вложенный foreach, чтобы извлечь post_id для этого пользователя. Но теперь я понимаю, что я не могу легко построить HTML-таблицу с этой концепцией.

Мне нелегко концептуализировать логику, чтобы собрать все это вместе.

Спасибо!

+2

Используйте 'count' каждого массива знать, что 'rowspan' для использования. – Kermit

+0

Каков ваш точный вопрос? –

+0

Жаль, что я не был чист. Мои точные вопросы: 1) Я нахожусь на правильном пути, используя вложенный foreach, и 2) как бы я построил таблицу HTML выше, используя вложенный foreach? – Pat

ответ

1

Вы на правильном пути. Это было бы что-то вроде:

echo '<table>'; 
foreach ($userquery as $user) { 
    //load sites into $loadedsites 

    $rowheight = count($loadedsites); 
    $c = 0; 

    //if there is a user without any sites, the rowheight would be 0. 
    //You need to deceide what to do than, because now it wouldnt show the user at all. 

    foreach($loadedsites as $site) { 

    if ($c==0) 
     echo '<tr><td rowspan="'.$rowheight.'">'.$user->user_id.'</td><td>'.$site->url.'</td></tr>'; 
    else 
     echo '<tr><td>'.$site->url.'</td></tr>'; 

    $c++; 
    } 
} 
echo '</table>'; 
+0

Ваш ответ работает почти. Он корректно отображает столбец имени пользователя с помощью строки, но он отображает только 1 закладку для всех пользователей и ее повторение до завершения. Я не уверен, почему это так. – Pat

+0

Каков ваш запрос, чтобы получить сайты? И что такое rowheight, когда вы проверяете источник? –

+0

Моя ошибка. Я нашел опечатку на моей стороне. Долгое время смотрел на это слишком долго. Это работает. Спасибо! – Pat

1

Это возможно способ сделать свой стол .. С вами данные из вашего запроса ..

<table> 
    <thead> 
    <tr> 
     <th>user_id<th> 
     <th>post_id<th> 
    </tr> 
    </thead> 
    <tbody> 
    <?php foreach($userquery as $uq): ?> 
    <tr> 
     <td><?php echo $uq['user_id']; ?></td> 
     <td> 
     <?php 
      $posts = explode(',', $uq['post_id']); 
      if(count($posts)>0): 
      ?> 
      <table> 
      <?php foreach($posts as $p): ?> 
      <tr><td><?php echo $p; ?> </td></tr> 
      <?php endforeach; ?> 
      </table> 
    <?php else: ?> 
      No posts... 
    <?php endif; ?> 
     </td> 
    </tr>  
    <?php endforeach; ?> 
    </tbody> 
</table> 
Смежные вопросы