Создайте сложную таблицу с помощью while / foreach - PullRequest
2 голосов
/ 07 сентября 2011

Я пытаюсь построить таблицу результатов из массива. В настоящее время у меня есть вывод результатов, как это:

   ID       VALUE             EXTRA
 --------------------------------------
|  1  |     Value 1         | Extra 1  |
|-----|---------------------|----------|
|  1  |     Value 2         | Extra 2  |
|-----|---------------------|----------|
|  2  |     Value 3         | Some 1   |
|-----|---------------------|----------|
|  3  |     Value 4         | Some 2   |
|-----|---------------------|----------|
|  3  |     Value 5         | Nothing  |
 --------------------------------------  

Обратите внимание на повторяющееся значение идентификатора. То, что я хотел бы сделать, это создать цикл внутри моего текущего цикла, который не будет отображать повторяющиеся идентификаторы. Примерно так:

   ID       VALUE             EXTRA
 --------------------------------------
|  1  |     Value 1         | Extra 1  |
|     |---------------------|----------|
|     |     Value 2         | Extra 2  |
|-----|---------------------|----------|
|  2  |     Value 3         | Some 1   |
|-----|---------------------|----------|
|  3  |     Value 4         | Some 2   |
|     |---------------------|----------|
|     |     Value 5         | Nothing  |
 --------------------------------------  

Вот мой текущий упрощенный код:

<?php
$i=0;
while ($i < $mynum) {

$f1=mysql_result($myresult,$i,"tableID");
$f2=mysql_result($myresult,$i,"values");       
$f3=mysql_result($myresult,$i,"extra");
?>
<tr>
 <td><?php echo $f1; ?></td>
 <td><?php echo $f2; ?></td>
 <td><?php echo $f3; ?></td>
</tr>       
<?php
$i++;
}
?>

Есть ли способ построить эту таблицу динамически так, как я хочу? Или я должен переосмыслить свою стратегию?

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

Если идентификаторы отсортированы последовательно, сохраните идентификатор в отдельной переменной и проверьте, не изменился ли он.Если это так, распечатайте удостоверение личности;если нет, выведите &nbsp; или аналогичное значение.

1 голос
/ 07 сентября 2011

Вот способ сделать это из предоставленного вами кода

<?php
    $i=0;

    $previousId = ''; // keeps track of the previous Id 
    while ($i < $mynum) {

    $html = '';

    $f1=mysql_result($myresult,$i,"tableID");
    $f2=mysql_result($myresult,$i,"values");       
    $f3=mysql_result($myresult,$i,"extra");
    $html .= '<tr>';
    if($previousId != $f1){ // fill the cell only if the new Id is different from the previous value
        $html .= '<td>'.$f1.'</td>';
    } else {
        $html .= '<td>&nbsp;</td>';
    }
            $previousId = $f1;
    $html .= '<td>'.$f2.'</td>';
    $html .= '<td>'.$f3.'</td>';
    $html .= '</tr>';

    $i++;
    }
            echo $html;
 ?>

Но это при условии, что $f1 заказаны.

...