创建带有for循环和if语句的ascii框时出现问题

时间:2019-04-23 10:13:49

标签: php loops for-loop

在本练习中,我试图创建一个包含for循环和if语句的框。我很困惑,不确定代码的哪一部分是错误的。 $ aboxwidth值1和4会以某种方式重复两次。

用空格替换0时,输出如下:

   output: 
        +0-0-0+0
        |000|0
        |000|0
        +0-0-0+0

    code:
<?php

//box builder
$iboxheight=4;
$aboxwidth=4;
//   +-----------+
//   |           |
//   |           |
//   |           |
//   +-----------+
//   +--+
//   |  |
//   |  |
//   +--+

//building boxheight
for ($i=1; $i <= $iboxheight; $i++) {
    //$boxwidth
    for ($a=1; $a <= $aboxwidth; $a++) {
        //build + in corners
    if (($i === 1 && $a === 1) || //corner top left
          ($i === 1 && $a === $aboxwidth)  ||  // corner top right
          ($i === $iboxheight && $a === 1)  ||  // corner bottom left
          ($i === $iboxheight && $a === $aboxwidth)) { // corner bottom right
        echo "+";
    }
        //build top and bottom
        if ($i === 1 || $i === $iboxheight) {
            if ($a !== 1 && $a !== $aboxwidth) {
                echo "-";
            }
        }
        //build walls
        if ($a === 1 || $a === $aboxwidth) {
            if ($i !== 1 && $i !== $iboxheight) {
                echo "|";
            }
        }
        if ($i !== 1 || $i !== $iboxheight) {
            if ($a !== 1 || $a !== $aboxwidth) {
                echo "0";
                //    echo "&nbsp;";
            }
        }
    }
    echo "<br>";
}

对于任何提示和建议,我深表感谢。 谢谢

1 个答案:

答案 0 :(得分:1)

该程序将echo "0"; $i$a 的{em}。为什么会这样?

($i !== 1 || $i !== $iboxheight)始终为true 。并且$a !== 1 || $a !== $aboxwidth总是 。当$ i为1时,它不等于$ iboxheight,因此为true。当$ a为1时,它不等于$ aboxwidth,因此为true。等等。程序echo的每次迭代都为0。
 (您可以尝试使用echo "($i,$a)";代替echo "0";来查看实际效果)。

如果将||更改为&&,它将达到预期的结果,即,当(行,列)不在“边界”上时,仅回显{whatever}。