变量增量不起作用

时间:2011-11-15 20:38:52

标签: php

当我启动网页时,增量无效!

它应该是这样的:$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
  ...

4 个答案:

答案 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++)

请参阅http://us.php.net/manual/en/control-structures.for.php

答案 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