0

データベースからプルしてアイテムのテーブルを動的に作成するスクリプトを作成しています。使用しているループは、変数をインクリメントしようとするたびに中断します。

同じ結果の例を次に示します。

このループは、複数のテーブルを作成する場合にうまく機能します。

<?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;
?>

ただし、このループは機能しません。テーブルに 2 つの列を作成し、複数の行に配列の完全な出力を作成したいと考えています。

<?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 ループで同じ変数に複数回書き込むことはできませんか?

4

1 に答える 1

0

配列要素が不足しています。アイテムは 7 つしかありませんが、8 つの要素をエコーし​​ようとします。それらを使用するときに十分な要素があるかどうかを確認するために、適切な境界チェックを行う必要があります。

まず、 while ループを次のように置き換えます。

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

しかし、あなたの問題は実際にはカウンターを増やし、$i++実際に存在するかどうかを確認せずに別の要素をエコーすることによって引き起こされます。簡単な修正:

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

更新: HereDoc なしで通常の PHP で実行する方法の例を追加しました。

<?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>
于 2013-04-13T06:27:09.427 に答える