刚开始学习如何编程并需要一些循环的基本帮助(尝试从在线资料中学习练习)。
在下面的代码中,我试图在10行中打印出值,然后在值的数量超过10之后生成一个新的表行。但是,我在混乱中使用我的循环,它只是连续打印出相同的值,而不会转到下一个值。
答案 0 :(得分:0)
正如指南一样,如果您要混合使用此类代码和标记,您可能会考虑其他语法。
您的问题是您的输出循环位于获取行内部。获取行是应该触发计数器递增的内容。
$res = $handle->fetchAll();
?>
<table>
<tr>
<th>Ice Cream</th>
<tr>
<tr>
<?php
$c = 0; // Our counter
foreach($res as $row) {
// Each Nth iteration would be a new table row
if($c % 10 == 0 && $c != 0) // If $c is divisible by $n...
{
// New table row
echo '</tr><tr>';
}
$c++;
?>
<td>
//etc.
答案 1 :(得分:0)
您正在循环中初始化迭代器变量($ c和$ n)。它们应该在循环之外初始化。
您应该使用while
语句替换if
循环。或者你可以完全取消它。
试试这个:
<?php
$c = 0; // Our counter
$n = 10; // Each Nth iteration would be a new table row
?>
<?php foreach($res as $row): ?>
<tr>
<?php
if($c % $n == 0 && $c != 0){ // If $c is divisible by $n... ?>
//New table row
echo '</tr><tr>';
}
$c++;
?>
<td><form method="POST" action="Ice Cream Choice.php" <?php echo $row['IceCream']; ?>>
<input type="submit" name="submit" value="<?php echo $row['IceCream']; ?>"/>
</form>
</td>
</tr>
<?php endforeach; ?>
答案 2 :(得分:0)
我将简化HTML以使示例更清晰。这是编写程序的一种方法。
// Fetch the array of rows.
$res = $handle->fetchAll();
// Keep count of which row number we're on. The first
// row we will be on is row 1.
$rowCounter = 1;
// Everything in the block (between the braces) is done
// sequentially for each row in the result set.
foreach ($res as $row)
{
// Print out the ice cream on a line.
echo $row, '<br/>';
// If we have reached a row which is a multiple of 2
// then print a horizontal rule.
if ($rowCounter % 2 == 0)
{
echo '<hr/>';
}
// Increase the row counter because we're about to
// start the loop again for the next row.
$rowCounter = $rowCounter + 1;
}
让我们假设:
$res = array('vanilla', 'chocolate', 'strawberry',
'raspberry', 'cherry');
现在让我们手动评估循环,看看发生了什么。为此,我们将维护一个变量和输出表。每一行都是循环的一次完整迭代。
$rowCounter | $row | output
------------+--------------+------------
1 | -- | --
2 | 'vanilla' | vanilla<br/>
3 | 'chocolate' | vanilla<br/>chocolate<br/><hr/>
4 | 'strawberry' | vanilla<br/>chocolate<br/><hr/>strawberry<br/>
etc.