【问题标题】:PHP: for-loops and if-statementPHP:for 循环和 if 语句
【发布时间】:2013-10-18 21:54:20
【问题描述】:

我目前正在学习初级 PHP 编程课程,我需要一些帮助来完成我正在尝试解决的一项作业。任务是创建一个表单,用户可以在其中输入一个正整数。然后,使用“for”循环显示由“hr”标签创建的水平线数量[提示:<hr size=1 width=50% color='black'>]。最后,使用 if 语句执行“模数”计算。当“for”循环中的计数器为偶数时,将水平线的宽度设置为 50%;否则,将水平线的宽度设置为 100%。

这是我到目前为止想出的代码:

<?php

if ($_POST) { // if the form is filled out
$integer = $_POST["pi"];

$i = $integer;

for ($i = 1; $i <= $integer; $i++) {
if ($i % 2) { // modulus operator
echo "<hr size=1 width=50% color='black'>";
} else {
echo "<hr size=1 width=100% color='red'>";
}

}
}
else { // otherwise display the form
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Enter a <i>Positive Integer</i>:
<input type="text" name="pi" size=5>
<input type="submit" value="Check"></form></p>
<?php
}
?>

我还不能发布图像,但示例输出应该是 50% 黑色水平线,然后是 100% 红色水平线,直到达到输入的整数。在每个小时之间似乎有一些间隔。

【问题讨论】:

  • 尝试更好地格式化您的代码,以提高可读性和质量。
  • 您遇到了什么问题?
  • 看我的回答,你只需要删除$i = $integer;这一行
  • 您需要将数字的百分比与0进行比较。请参阅我的答案。
  • 哦,这太傻了。发布的代码的输出正是海报状态应该输出的内容(50% 黑色,然后 100% 红色,重复)......这很奇怪,不是问题说明输出应该是什么(奇数行应该是100%,甚至应该是 50%)。无论如何,这一切似乎都很好。

标签: php for-loop


【解决方案1】:

这一行:

$i = $integer;

...是多余的,只要你说for($i = ...,$i 就会被覆盖。在你的情况下,应该是这样。从那条线开始。

其次,我认为您遇到的问题是您的线条没有显示为黑色或红色。原因是color 是一个字体属性,你应该看看这篇文章来了解如何改变你的颜色: Changing the color of an hr element

我建议在您的 PHP 中使用 class='black'class='red' 并在您的 CSS 中设置类。

【讨论】:

  • 我正在使用 Safari 并且颜色属性工作正常。其他浏览器可能不是这样。
【解决方案2】:

目前还不清楚问题是什么。如果问题是您的 HR 元素之间有空格,那么删除默认边距会有所帮助(至少在 Firefox 中,我不确定是否所有浏览器都在 HR 上使用相同的呈现规则)。

<hr size="1" width=50% color='black' style="margin:0;" />
<hr size="1" width=100% color='red' style="margin:0;" />

【讨论】:

    【解决方案3】:

    问题是您分配的 $i 等于变量 $integer,因此它们是相同的值。

        <?php
    if ($_POST)
    { // if the form is filled out
        $integer = $_POST["pi"];
        for ($i = 1; $i <= $integer; $i++)
        {
            if ($i % 2 ===0)
            { // modulus operator
                echo "<hr size=1 width=50% color='black'>";
            }
            else
            {
                echo "<hr size=1 width=100% color='red'>";
            }
        }
    }
    else
    { // otherwise display the form
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Enter a <i>Positive Integer</i>:
    <input type="text" name="pi" size=5>
    <input type="submit" value="Check"></form></p>
    <?php
    }
    ?>
    

    【讨论】:

    • 嗯?没有区别.. 他在做$i = $integer 而不是$integer = $i 无论如何都会抛出一个错误,因为它是一个空值......
    • 当然$i = $integer 是不必要的,但删除它不会改变任何事情,因为$ifor ($i = 1; $i &lt;= $integer; $i++) 中被重新分配
    • dev.michaelnorris.co.uk/so.php这是OP要求的,这是上面显示的代码。
    • OP 想要一个跨越 100% 的 &lt;hr&gt; 标签,然后是一个跨越 50% 的 &lt;hr&gt; 标签,重复直到达到提交的数量。这正是我的代码所做的。
    • 删除 $i = $integer 没有任何区别。我测试了你的代码,它已经按照你的描述做了?
    【解决方案4】:

    使用此 CSS 代码格式化所有 hr 元素

    <style type="text/css">
    hr {margin: 0px auto 0px auto;}
    </style>
    

    【讨论】:

    • OP 没有询问&lt;hr&gt; 标签的样式。
    • 那么他在问什么?他的代码运行得很好,并引用他的话“在每个小时之间似乎有一些间距”,我认为这是他的问题?
    猜你喜欢
    • 1970-01-01
    • 2013-06-09
    • 2013-02-06
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    相关资源
    最近更新 更多