当我启动网页时,增量无效!
它应该是这样的:$i = from 1 to x (0,1,2,3,4,5,6 etc..)
但相反,它跳过了(1,3,5,7 etc..)
的结果的每一步。
为什么这段代码会这样做?
<ul class="about">
<?php
$result = mysql_query("SELECT * FROM info WHERE id = 1");
while ($row = mysql_fetch_assoc($result))
{
$bioText = $row['bio'];
}
$endBioTxt = explode("\n", $bioText);
for ($i=0; $i < count($endBioTxt);)
{
if (checkNum($i) == true)
{
echo "<li class='left'><div>".$endBioTxt[$i]."</div></li>";
echo $i;
}
else
{
echo "<li class='right'><div>".$endBioTxt[$i]."</div></li>";
echo $i;
}
$i++;
}
// Function to check if number is prime
function checkNum($num){
return ($num % 2) ? TRUE : FALSE;
}
?>
</ul>
输出:
Sometext!(右侧)
0
1
Sometext2!(右侧)
2
3
...
答案 0 :(得分:3)
$i++;
你不需要在for
循环中使用这一行,而是使用你应该放置的for
循环声明。
for ($i=0; $i < count($endBioTxt);$i++)
{
if (checkNum($i) == true)
{
echo "<li class='left'><div>".$endBioTxt[$i]."</div></li>";
echo $i;
}
else
{
echo "<li class='right'><div>".$endBioTxt[$i]."</div></li>";
echo $i;
}
//$i++; You don't need this line inside a for loop otherwise $i will be incremented twice
}
编辑:不相关,但这不是您检查数字是否为素数的方式
// Function to check if number is prime
function checkNum($num){
return ($num % 2) ? TRUE : FALSE;
}
答案 1 :(得分:3)
请不要像其他建议那样做:
for ($i=0; $i < count($endBioTxt); $i++)
这样做:
$count = count($endBioTxt);
for ($i=0; $i < $count; $i++) {
}
无需每次迭代计算计数。
Nacereddine虽然你不需要做的事情是正确的:
$i++;
在循环内部,因为首选(正确的?)语法是在循环调用中执行它。
修改强>
你的代码看起来对我来说很“奇怪”。
你为什么这样做:
while ($row = mysql_fetch_assoc($result))
{
$bioText = $row['bio'];
}
???
这只会将$bioText
设置为记录集中的最后一条记录(生物值)。
编辑2
此外,我认为你真的不需要函数来计算数字的模数。
编辑3
如果我正确理解你的答案,你希望0再次位于left li
的{{1}}和right li
中的1,依此类推。
这应该这样做:
left
答案 2 :(得分:2)
您的陈述应该是:
for ($i=0; $i < count($endBioTxt); $i++)
答案 3 :(得分:0)
此代码有效,请在您的环境中测试,然后取消注释/评论您需要的内容。
<?php
// This is how query should look like, not big fan of PHP but as far as I remember...
/*
$result = mysql_query("SELECT * FROM info WHERE id = 1");
$row = mysql_fetch_assoc($result);
$bioText = $row['bio'];
$endBioTxt = explode("\n", $bioText);
*/
$endBioTxt[0] = "one";
$endBioTxt[1] = "two";
$endBioTxt[2] = "three";
$endBioTxt[3] = "four";
$endBioTxt[4] = "five";
$totalElements = count($endBioTxt);
for ($i = 0; $i < $totalElements; $i++)
{
if ($i % 2)
{
echo "<li class='left'><div>".$endBioTxt[$i]."</div></li>";
}
else
{
echo "<li class='right'><div>".$endBioTxt[$i]."</div></li>";
}
/*
// This is how you should test if all your array elements are set
if (isset($endBioTxt[$i]) == false)
{
echo "Array has some values that are not set...";
}
*/
}
修改1
尝试使用$endBioTxt = preg_split('/$\R?^/m', $bioTxt);
代替explode
。