увеличение mysql_fetch_array?

0

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

$i =0;
for ($i = 1; $i <= 3; ++$i){
while($row = mysql_fetch_array($result)){

$company = $row['company'];
$comp_strt = $row['comp_strt'];
$comp_city = $row['comp_city'];
$comp_state = $row['comp_state'];
$comp_zip = $row['comp_zip'];
$celldata= $company."<br>".$comp_strt."<br>".$comp_city.",&nbsp;".$comp_state."&nbsp;".$comp_zip;
if($i = 1){echo "<tr style='row-height: 5em;'><td>'".$celldata."'</td>";}
if($i = 2){echo "<td>'".$celldata."'</td>";}
if($i = 3){echo "<td>'".$celldata."'</td></tr>"; $i = 1;}
}}
Теги:

5 ответов

1
Лучший ответ

Я бы сделал это:

$cellsPerRow = 3;
$i = 0;
echo '<table>';
while ($row = mysql_fetch_array($result)) {
    if ($i % $cellsPerRow == 0) {
        echo '<tr>';
    }

    // process $row and echo the table cell

    if ($i % $cellsPerRow == $cellsPerRow - 1) {
        echo '</tr>';
    }
    $i++;
}
if ($i > 0 && $i % $cellsPerRow != 0) { // finish off row if needed
    while ($i % $cellsPerRow != 0) {
        echo '<td></td>';
        $i++;
    }
    echo '</tr>';
}
echo '</table>';

Это всегда даст вам правильную таблицу.

  • 0
    Собираешь меня немного времени (не каламбур), чтобы переварить это. Похоже, что это решение не оставляет места для возможной ошибки. Спасибо, Гамбо.
  • 0
    @ Том: Ну, есть один. Вы должны проверить, есть ли какие-либо строки вообще. В противном случае вы напечатаете теги таблицы, но без строк / ячеек. Так что возьмите mysql_num_rows в условии дополнительного оператора if, который оборачивается вокруг всего echo '<table>'; … echo '</table>'; ,
Показать ещё 2 комментария
1

Проблема в том, что цикл while не будет завершен, пока строки в mysql_fetch_array не будут исчерпаны. Просто используйте цикл while и приращение $i внутри while:

$i= 0;
while ($row = mysql_fetch_array($result)) {
 // process the row into $celldata
 if ($i==0 || $i%3==0) {
   if ($i > 0) // close out existing row
   // start a new row
 }
 // output cell data
 $i++;
}
// Output a closing '</tr>' tag if $i > 0
  • 0
    На этом примечании настоятельно рекомендуется использовать модуль модуля %, используемый здесь, а не сбрасывать счетчик. +1
1

Вы используете = для проверки равенства. Вы должны использовать ==

if($i == 1){echo "<tr style='row-height: 5em;'><td>'".$celldata."'</td>";}
if($i == 2){echo "<td>'".$celldata."'</td>";}
if($i == 3){echo "<td>'".$celldata."'</td></tr>"; $i = 1;}

Вероятно, это не проблема, но это начало.

0

Если вы хотите нарисовать 3 метки рядом друг с другом, вам просто нужно вставить блок </tr><tr> в нужное положение. У вас может быть только переменная, не требующая цикла for:

$i = 0;
echo '<table><tr>';
while($row = mysql_fetch_array($result)){
    if($i == 3) {
        echo '</tr><tr>';
        $i = 0;
    }

    $company = $row['company'];
    $comp_strt = $row['comp_strt'];
    $comp_city = $row['comp_city'];
    $comp_state = $row['comp_state'];
    $comp_zip = $row['comp_zip'];
    $celldata= $company."<br>".$comp_strt."<br>".$comp_city.",&nbsp;".$comp_state."&nbsp;".$comp_zip;

    echo "<td>$celldata</td>";
    $i++;
}
echo '</tr></table>';

Итак, каждый раз, когда счетчик $i достигает 3, он создает разрыв строки таблицы и устанавливает значение $i обратно в ноль, в результате получается 3 ячейки в строке.

-3

избавиться от цикла for, если вы не хотите делать это три раза, ffs

Ещё вопросы

Сообщество Overcoder
Наверх
Меню