我尝试动态生成包含数据库数据的HTML表。输出看起来很完美,但经过仔细检查,我意识到它省略了每四个结果。我知道它与我的while循环结构和if / else语句有关,但我不确定它究竟是什么。
$i=0;
while ($person = $pull_person->fetch()){
if ($i <= 2){
echo "<td valign='top'>";
echo "<h3>" . $person['person_name'] . " - " . $person['person_id'] . "</h3>";
echo "<label style='background-image:url(" . $person['person_pic'] . ");'><input type='checkbox' name='person[]' value='" . $person['person_id'] . "''></label>";
echo "</td>";
$i++;
}
else{
echo "</tr>";
echo "<tr>";
$i=0;
}
}
它必须是简单/明显的东西,但它没有注册我。谢谢!
答案 0 :(得分:3)
由于循环限制逻辑,循环没有达到第四个结果。
$i=0;
while ($person = $pull_person->fetch()){
if ($i <= 2){
echo "<p>item: $i</p>";
$i++;
}
}
迭代1:$ i = 0
迭代2:$ i = 1
迭代3:$ i = 2
迭代4:$ i = 3
迭代4永远不会被命中,因为它会检查并看到$ i必须小于或等于2. 如果将其更改为小于或等于3,它将按您的意愿工作
if ($i <= 3)
答案 1 :(得分:1)
显然......只有在满足条件时才增加变量$i
:
$i=0;
while ($person = $pull_person->fetch())
{
if ($i <= 2)
{
//output
$i++;
}
else
{
//no output
$i=0;
}
}
所以这发生了:
iteration old $i new $i output
1 0 1 yes
2 1 2 yes
3 2 3 yes
4 3 0 no //condition not met
5 0 1 yes //loops...
...
您在此处观察到的是,代码将跳过条件函数2中的数字给出的迭代输出。因此,例如,如果使用条件$i <= 3
,结果为:
iteration old $i new $i output
1 0 1 yes
2 1 2 yes
3 2 3 yes
4 3 4 yes
5 4 0 no //condition not met
6 0 1 yes //loops...
...
如果要在每n次迭代中插入一些内容,请执行以下操作:
$n = 3; //number of items per row
$i = 0;
while ($person = $pull_person->fetch())
{
//output item
$i++;
if ($i == $n)
{
//something each $n iterations
$i=0;
}
}
效果如下(假设$ n = 3):
iteration old $i new $i new row
1 0 1 no
2 1 2 no
3 2 0 yes //condition is met, $i reset to 0
4 0 1 no
5 1 2 no
6 2 0 yes //condition is met, $i reset to 0
...
注1:每次迭代都会输出一个项目。
注2:您可以调整i的初始值以获得偏移量。
答案 2 :(得分:0)
误读问题,但会留下答案,因为它可能会提供用途。
最好的方法是将数组视为“模块”(数学上) - 即使用模块化算术:
if ((i % 4) == 0)
也就是说,指数0,4,8,12,16 ......将仅作为目标。实际上,这就是大多数setInterval
函数在幕后工作的方式。