Проблемы при создании поля ascii с циклами for и if - PullRequest
0 голосов
/ 23 апреля 2019

В этом упражнении я пытаюсь создать поле с циклами 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 Ответ

1 голос
/ 23 апреля 2019

Программа будет echo "0"; для каждые $i и $a. Почему это?

Это ($i !== 1 || $i !== $iboxheight) всегда верно . И это $a !== 1 || $a !== $aboxwidth всегда верно . Когда $ i равен 1, он не равен $ iboxheight, поэтому верно. Когда $ a равен 1, он не равен $ aboxwidth, поэтому верно. И так далее. Программа echo 0 для каждой итерации.
(Вы можете попробовать echo "($i,$a)"; вместо echo "0";, чтобы увидеть его в действии).

Если || изменить на &&, это приведет к желаемому результату, то есть только к эхо {что угодно}, когда (строка, столбец) не находится на "границе".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...