使用循环的html表的行和列中数字的反射模式

时间:2019-03-26 06:52:54

标签: php loops html-table integer palindrome

我被困在尝试使用嵌套循环从数字中形成反射图案。

我已经尝试过,但是输出看起来像这样:

|0|1|2|
|0|1|2|
|0|1|2|

这是我的代码:

<?php
echo "<table border =\"1\" style='border-collapse: collapse'>";
for ($row=1; $row <= 3; $row++) { 
    echo "<tr> \n";

    for ($col=1; $col <= 3; $col++) { 
        $p = $col-1;
        echo "<td>$p</td> \n";
    }

    echo "</tr>";
}

echo "</table>";
?>

我希望得到这个结果:

|0|1|0|
|1|2|1|
|0|1|0|

每列和行的单元格值必须递增到给定的数量,然后递减以形成镜像/回文序列。

3 个答案:

答案 0 :(得分:0)

有很多方法可以实现这一目标。

一种简单的方法是

<?php
$baseNumber = 0;

echo "<table border='1' style='border-collapse: collapse'>";
for ($row = 0; $row < 3; $row++) {
    echo "<tr>";

    if ($row % 2 !== 0) {
        $baseNumber++;
    } else {
        $baseNumber = 0;
    }

    for ($col = 0; $col < 3; $col++) {
        echo "<td>" . ($col % 2 === 0 ? $baseNumber : $baseNumber + 1) . "</td>";
    }

    echo "</tr>";
}

echo "</table>";

答案 1 :(得分:0)

此代码仅用callpatternGenerator函数即可完成您想做的事情,其中​​示例中的数字为3(0,1,2)。

此代码中的想法是使用两个for loops,一个从最小数开始到最大,另一个从最大数减少到最小后开始。

例如: 如果min = 0max = 5 第一个loop将打印0、1、2、3、4、5 第二个将打印4,3,2,1,0 就是这样。

首先,我创建了一个函数,该函数仅在名为rowGenerator的行上创建,它将$min$max作为parameters并打印一行 因此,如果我们要打印这样的一行:|0|1|0|,那么我们将使用min = 0max = 1调用此函数,然后 如果我们要打印这样的一行:|1|2|1|,那么我们将用min = 1max = 2来调用它。

function rowGenerator($min, $max)
{
    echo '<tr>';

    for($i = $min; $i<=$max;$i++)
        echo '<td>'.$i.'</td>';

    for($i = $max-1; $i>=$min;$i--)
        echo '<td>'.$i.'</td>';

    echo '</tr>';   
}

现在,我们可以独立打印每一行。现在,如果要查看对rowGenerator函数所做的调用,我们希望将整个表打印出来,如下所示:

({min = 0max = 1), (min = 1max = 2)和 (min = 0max = 1)。 最小值为(0,1,0)。 是的,再次是相同的模式。那么我们又需要两个loops,一个从0开始并增加数字直到达到1,另一个从00循环。< / p>

这就是patternGenerator函数中发生的事情。当您使用不同数字的数量来调用它时,function仅得到min(在您的情况下始终为0)和max

function patternGenerator($numberOfDistinct )
{
    echo "<table border =\"1\" style='border-collapse: collapse'>";
    $min = 0;
    $max = $numberOfDistinct - 2;
    for($i = $min;$i<=$max; $i++)
    {
        rowGenerator($i,$i+1);
    }
    for($i = $max-1;$i>=$min;$i--)
    {
        rowGenerator($i,$i+1);
    }
    echo '</table>';

}

这是调用patternGenerator(3)的输出:

result of calling patternGenerator(3)

调用patternGenerator(5)的输出:

result of calling patternGenerator(5)

答案 2 :(得分:0)

首先声明表单元格计数的平方根。换句话说,如果要使用5 x 5单元格表(25个单元格),请声明$size = 5

由于您的数字从零开始,因此显示的最高整数应该为$size - 1-我将其称为$max

我支持您的嵌套循环设计,并且变量分别命名为$row$col

在这些循环中,您只需要区分“计数器”是高于还是低于$max值的一半。如果它高于$max / 2,则从$row中减去“计数器”(例如$col$max)。

通过将两个可能调整的“计数器”加起来并在内部循环中打印它们,可以生成所需的图案(或者至少是我认为您想要的图案)。此解决方案适用于$size及更高版本中的0个值,请与我的演示链接一起玩。

代码:(Demo

$size = 5;
$max = $size - 1;
echo "<table>\n";
for ($row = 0; $row < $size; ++$row) {
    echo "\t<tr>";
    for ($col = 0; $col < $size; ++$col) {
        echo "<td>" . (($row >= $max / 2 ? $max - $row : $row) + ($col >= $max / 2 ? $max - $col : $col)) . "</td>";
    }
    echo "</tr>\n";
}
echo "</table>";

输出:

<table>
    <tr><td>0</td><td>1</td><td>2</td><td>1</td><td>0</td></tr>
    <tr><td>1</td><td>2</td><td>3</td><td>2</td><td>1</td></tr>
    <tr><td>2</td><td>3</td><td>4</td><td>3</td><td>2</td></tr>
    <tr><td>1</td><td>2</td><td>3</td><td>2</td><td>1</td></tr>
    <tr><td>0</td><td>1</td><td>2</td><td>1</td><td>0</td></tr>
</table>