2014-12-03 3 views
0

Я пытаюсь создать динамическую таблицу html при запросе БД с помощью PHP. Мне сложно понять, как добавить к нему два разных цикла, чтобы гарантировать, что таблица, которую я хочу создать, генерируется правильно.Динамическое создание HTML-таблицы с PHP

<table><tr> 
    <td>$ID and $ITEM_NAME</td> 
    <td>$ID and $ITEM_NAME</td> 
</tr> 
<tr> 
    <td>$ID and $ITEM_NAME</td> 
    <td>$ID and $ITEM_NAME</td> 
</tr> 
<tr> 
    <td>$ID and $ITEM_NAME</td> 
    <td>$ID and $ITEM_NAME</td> 
</tr></table> 
<hr> 
<table><tr> 
    <td>$ID and $ITEM_NAME</td> 
    <td>$ID and $ITEM_NAME</td> 
</tr> 
<tr> 
    <td>$ID and $ITEM_NAME</td> 
    <td>$ID and $ITEM_NAME</td> 
</tr> 
<tr> 
    <td>$ID and $ITEM_NAME</td> 
    <td>$ID and $ITEM_NAME</td> 
</tr></table> 
<hr> 

Как вы можете видеть, что я должен добавить две строки на сумму информации в одно HTML строку таблицы и на 3-й строке, мне нужно добавить в


и создать новый HTML-таблицу, продолжая мой запрос.

В настоящее время мой PHP-код выглядит примерно так.

foreach($item_ID as $x => $x_value) { 

     $sql = "SELECT item_name FROM item_table WHERE id = '$x_value'"; 
     $query = $this -> db -> query($sql); 

     foreach($query->result() as $row){ 
      $item_name = $row->item_name; 
     } 

     $html_output .= '<tr><td>'; 
     $html_output .= $x_value. " ".$item_name; 
     $html_output .= '</td>'; 

     //Not sure how to proceed with closing the rows and opening new one on 3rd query item? 

    } 

Обратите внимание, что я использую Codeigniter, однако я просто ищу некоторую помощь в логике.

Сообщите мне, если я могу помочь разобраться.

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

+0

использовать счетчик строк и modulo, чтобы у вас было что-то вроде '$ html_output. = $ IRowCounter% 2 == 0? "": ""; '... как очень грубое приближение – CD001

ответ

1

Во-первых, сделать только один запрос:

$sql = "SELECT id, item_name FROM item_table WHERE id IN ('" . implode("', '", $item_ID) ."')"; 
$query = $this -> db -> query($sql); 

Установить счетчик

$i = 1; 

Затем запустите ваш стол код

$html_output .= '<table>'; 

Теперь цикл по результатам, создать строки и ищите этот счетчик

foreach($query->result() as $row){ 
    if ($i % 2 == 1) { 
     $html_output .= '<tr>'; 
    } 
    $html_output .= '<td>' . $row->id .' and' . $row->item_name . '</td>'; 
    if ($i % 2 == 0) { 
     $html_output .= '</tr>'; 
    } 
    if ($i % 6 == 0) { 
     $html_output .= '</table><hr><table>'; 
    } 
    $i++; 
} 
  • $i % 2 == 1 часть начинает новую строку таблицы перед каждым нечетным элементом (1, 3, 5, ...).

  • Часть $i % 2 == 0 заканчивает строку таблицы после каждого элемента (2, 4, 6, ...).

  • Часть $i % 6 == 0 добавляет строку после каждой третьей строки (фактически после каждого шестого элемента, и поскольку в ней есть два элемента в строке, это после трех строк).

Наконец-то закройте стол, но сначала проверьте, есть ли у нас четное количество предметов. Если нет, добавьте пустую ячейку таблицы.

if ($i % 2 == 1) { 
    $html_output .= '<td></td></tr>'; 
} 
$html_output .= '</table>'; 
+0

Эй, Пол, что-то не так с вашим запросом? синтаксис кажется выключен. – BaconJuice

+0

Вы правы, пропустили одну цитату, исправленную сейчас. – Paul

+0

Я только что заметил что-то еще. Одна часть моего требования заключалась в том, что он также показывает два элемента в строке. Вышеприведенный код выводит один элемент для каждой строки. Еще раз спасибо. Мне нравится идея одного запроса! Хотите узнать, можете ли вы мне помочь со вторым требованием? – BaconJuice

0

Чтобы перефразировать, похоже, что вы хотите создать новую таблицу с каждой нечетной строкой. Кроме того, вы хотите разделить таблицы с тегом HR.

$i = 0; //initialize as 0 rows 
foreach($item_ID as $x => $x_value) { 

    $sql = "SELECT item_name FROM item_table WHERE id = '$x_value'"; 
    $query = $this -> db -> query($sql); 

    foreach($query->result() as $row){ 
     $item_name = $row->item_name; 

     $row_output = '<tr><td>'; 
     $row_output .= $x_value. " ".$item_name; 
     $row_output .= '</td>'; 
     //presumably you would close the row here too, unless you have more table cells you aren't showing us 

     $i++;//we have a row, so increment 
     if (!($i % 2)) { // if this has a remainder, then the current row counter is odd 
      if ($i != 1) { 
      //beginning of a table that isn't the first table, add the hr 
      $html_output .= '<hr>'; 
      } 
      $html_output .= '<table>'; // open table 
      $html_output .= $row_output; 
     } else { //this is an even numbered row, the last row of the table 
      $html_output .= $row_output; 
      $html_output .= '</table>'; // close table 
     } 
    } 
} 
+0

Hi faerysteel, код выше пропустил одну часть моего требования, когда мне нужно вывести 2 элемента в за строку. Проверьте выходной html-пример выше. Еще раз спасибо за помощь! – BaconJuice

+0

Просьба пояснить: Для каждого двух результатов есть одна строка. Тогда для каждой из двух строк есть одна таблица. Верный? Почему вы разбиваете строки на несколько таблиц? Почему вы помещаете несколько элементов данных ($ ID и $ ITEM_NAME) в каждую ячейку и почему две из этих строк? Кажется, это злоупотребление таблицами. Что именно вы пытаетесь достичь? Вероятно, есть лучший способ. – faerysteel

Смежные вопросы