Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Вывод информации из базы по 3 элемента на строку


Автор: xarakiry 21.10.2008, 22:47
Встала задача вывода информации из базы в таблицу по 3 элемента в строку.
Т.е примерно так 

Код

<tr>
<td><?=$row['pic1']?></td>
<td><?=$row['pic2']?></td>
<td><?=$row['pic3']?></td>
</tr>

<tr>
<td><?=$row['pic4']?></td>
<td><?=$row['pic5']?></td>
<td><?=$row['pic6']?></td>
</tr>

и т.д

Для меня это не совсем стандартно, вот хотелось бы узнать как такое осуществить...
было бы строка в строку то понятно..

Автор: bars80080 21.10.2008, 22:54
Код

$i = 0;
while($row = mysql_fetch_array($r)) {
    if(!($i%3)) echo '<tr>';
    echo '<td>'.$row['pic'].'</td>';
    if(!(($i + 1)%3)) echo '</tr>';
    $i++;
}
for(;($i%3);$i++) { echo '<td></td>';
    if(!(($i + 1)%3)) echo '</tr>'; }


как-то так

хотя мог и ошибиться

Автор: unicross 21.10.2008, 23:51
Код

<?php
$arr = array('1','2','3','4','5','6','7','8','9','10',
      '11','12','13','14','15','16','17','18','19','20',
      '21','22','23','24','25','26','27','28','29','30');
echo '<table border=1>';
echo "<tr>\n";
for ($i=0; $i<count($arr); $i++) {
   if ($i != 0 && !($i%3)) { echo "</tr>\n\n<tr>\n"; }
   echo "<td>" . $arr[$i] . "</td>\n";
}
echo "</tr>\n";
echo "</table>\n";
?>

Автор: MoLeX 22.10.2008, 06:07
Цитата(unicross @  21.10.2008,  23:51 Найти цитируемый пост)
$arr = array('1','2','3','4','5','6','7','8','9','10',
      '11','12','13','14','15','16','17','18','19','20',
      '21','22','23','24','25','26','27','28','29','30');


Цитата(unicross @  21.10.2008,  23:51 Найти цитируемый пост)
for ($i=0; $i<count($arr); $i++)


мне это манипуляция понравилась, очень... 

unicross, а не легче ли было в for вместо count($arr) поставить сразу же число?

Автор: bars80080 22.10.2008, 09:47
высокосодержательное сообщение Serkys'a, видимо, относится к продолжению глумления над скриптом unicross'а,
хотя итак ясно, что числа он забил в массив исключительно для примера. а предполагаются там данные


всё же, хотел бы спросить unicross, а если количество элементов не кратно трём, что будет в последней строчке?

Автор: krundetz 22.10.2008, 11:52
Цитата(MoLeX @ 22.10.2008,  06:07)
unicross, а не легче ли было в for вместо count($arr) поставить сразу же число?

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

Автор: unicross 22.10.2008, 17:44
krundetz, спасибо за совет. Учту в будущем.  smile 
Цитата(MoLeX @  22.10.2008,  06:07 Найти цитируемый пост)
unicross, а не легче ли было в for вместо count($arr) поставить сразу же число?

MoLeX, вы имели в виду то же, что и krundetz?

Цитата(bars80080 @  22.10.2008,  09:47 Найти цитируемый пост)
всё же, хотел бы спросить unicross, а если количество элементов не кратно трём, что будет в последней строчке?

bars80080, будет такая же ошибка, как и в вашем примере
Цитата(bars80080 @  21.10.2008,  22:54 Найти цитируемый пост)
for(;($i%3);$i++) { echo '<td></td>';

То, что вы указали <td></td> не означает, что это будет правильно обработано браузером. Ячейка должна иметь какое-либо значение. И в вашем и моем примере будут пустые ячейки. Если бы вы написали <td>&nbsp;</td>, тогда все OK.

Цитата(bars80080 @  22.10.2008,  09:47 Найти цитируемый пост)
высокосодержательное сообщение Serkys'a, видимо, относится к продолжению глумления над скриптом unicross'а,

Кто такой Serkys? О чем идет речь?

Автор: bars80080 22.10.2008, 18:05
Цитата(unicross @  22.10.2008,  17:44 Найти цитируемый пост)
Кто такой Serkys? О чем идет речь? 

его уже удалили

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)