2013-04-13 2 views
0

Я пишу сценарий, чтобы вытащить из базы данных и динамически создать таблицу элементов. Цикл я использую разрывы каждый раз, когда я пытаюсь увеличить число.PHP while Loop - запись в переменную несколько раз с Heredoc

Ниже приведен пример с тем же результатом:

Этот цикл будет работать нормально для создания нескольких таблиц.

<?php 

$item=array("item1", "item2", "item3", "item4", "item5", "item6", "item7"); 
$i=0; 


while($i!=count($item)){ 
$galleryItem.=<<<HTML 
<table> 
<tr> 
<td>$item[$i]</td> 
</tr> 
</table> 
HTML; 
$i++; 
} 

echo $galleryItem; 
?> 

Этот цикл, однако, не будет работать. Я хочу, чтобы он создал два столбца в таблице с полным выходом массива в несколько строк.

<?php 

$item=array("item1", "item2", "item3", "item4", "item5", "item6", "item7"); 
$i=0; 

while($i!=count($item)){ 

$galleryItem.=<<<HTML 
<table> 
<tr> 
<td>$item[$i]</td> 


HTML; 

$i++; 

$galleryItem.=<<<HTML 


<td>$item[$i]</td> 
</tr> 
</table> 
$i++; 
} 

echo $galleryItem; 
?> 

Что я могу делать неправильно? Будет ли PHP не позволять вам писать одну и ту же переменную более одного раза в цикле while?

+1

Вы не закрыть последнюю Heredoc – Jon

+0

Спасибо , но код еще не работает – user2276737

+0

также вы можете сделать это с помощью цикла foreach –

ответ

0

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

Начнем с того, заменить вас в то время как петля с:

while($i <= count($item)) { 
    ... 
} 

Но ваша проблема на самом деле вызвано увеличением вашего счетчика $i++ и вторя другой элемент без проверки, если один на самом деле существует. Быстрое исправление:

<td><?php echo ($i <=count($item)) ? $item[$i] : ''; ?></td> 

UPDATE: Я добавил пример того, как вы могли бы сделать это в обычном PHP без Heredoc:

<?php 

    $item = array("item1", "item2", "item3", "item4", "item5", "item6", "item7"); 
    $i=0; 

?><table> 
<?php while($i <= count($item)): ?> 
    <?php if (($i % 2) == 0): ?><tr><?php endif ?> 
     <td><?php echo ($i < count($item)) ? $item[$i] : ''; ?></td> 
    <?php if (($i % 2) == 1): ?></tr><?php endif ?> 
<?php $i++; endwhile; ?> 
</table> 
+0

Благодарим за помощь. Мне не нужен тройной оператор, но изменение условия на <= вместо! = Сделало трюк. Любое понимание того, почему? – user2276737

+0

На самом деле вы должны использовать '$ i