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

问题描述 投票:0回答:3

我试图使用嵌套循环从数字中制作反射模式。

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

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

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

php loops html-table integer palindrome
3个回答
0
投票

首先声明表格单元格数的平方根。换句话说,如果你想要一个5乘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>

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>";

0
投票

这个代码将做你想要的只是call patternGenerator函数与你想要的例子数量为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)。是的,它再次是相同的模式。然后我们再次需要两个loops0开始并增加数量直到达到1,另一个从0循环到0

这就是patternGenerator功能中发生的事情。当你用不同数字的数量调用它时,function只得到你的情况下总是0的minmax

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)

© www.soinside.com 2019 - 2024. All rights reserved.