【问题标题】:How to do a Diamond Pattern / Shape (asterisks) inside a table? (html + php)如何在桌子内制作菱形图案/形状(星号)? (html + php)
【发布时间】:2017-04-09 20:25:30
【问题描述】:

我必须在表格内使用 for 循环制作一个菱形星号。 星号前后必须有“空白”<td> 空格才能移动并使其看起来居中,因此它看起来像钻石。我怎么做? (我在 HTML 代码中使用了 PHP。)

没有<tr><td> 标签的代码,看起来像菱形,因为它居中对齐:

<center>
<?php
echo "<table border = 1>";

    // loop for the pyramid

        for($i = 1; $i <= 10; $i += 2) {
            for($j = 1; $j <= $i; $j++) {
                echo "* ";
            }
        echo "<br />";
        }

    // loop for the inverted pyramid, so it looks like a diamond

    for($i = 7; $i >= 1; $i -= 2) {
        for($j = 1; $j <= $i; $j++) {
            echo "* ";
        }   
    echo "<br />";
    }

echo "</table>";
?>
</center>

带有&lt;tr&gt;&lt;td&gt; 标签的代码需要“空格”以使其看起来像居中对齐:

<?php
echo "<table border = 1>";

    // loop for the pyramid

    echo "<tr>";
            for($i = 1; $i <= 10; $i += 2) {
            echo "<tr>";
                for($j = 1; $j <= $i; $j++) {
                    echo "<td>* </td>";
                }
            echo "</tr>";
        }
    echo "</tr>";

    // loop for the inverted pyramid, so it looks like a diamond

    for($i = 7; $i >= 1; $i -= 2) {
    echo "<tr>";
        for($j = 1; $j <= $i; $j++) {
            echo "<td>* </td>";
        }   
    echo "<br />";
    echo "</tr>";
    }

echo "</table>";
?>

请帮忙!

【问题讨论】:

    标签: php html html-table


    【解决方案1】:

    这是您的解决方案的新代码。我添加了逻辑来将空白 td 向前和向后放置到 *

    <?php
    echo "<table border = 1>";
    
        // loop for the pyramid
    
        echo "<tr>";
        $max = $initAmount = 10;
                for($i = 1; $i <= $initAmount; $i += 2) {
                    $max = $max -2;
    
                        $halfTD = (int)$max/2;
                echo "<tr>";
                for($b = 1; $b <= $halfTD; $b++){
                            echo "<td></td>";
                        }
                    for($j = 1; $j <= $i; $j++) {
    
    
                        echo "<td>* </td>";
                    }
                    for($b = 1; $b <= $halfTD; $b++){
                            echo "<td></td>";
                        }
                echo "</tr>";
            }
        echo "</tr>";
    
        // loop for the inverted pyramid, so it looks like a diamond
    $max = $initAmount = 10;
        for($i = 7; $i >= 1; $i -= 2) {
            $max = $max -2;
            $diff = $initAmount - $max;
            $blankTd = $diff/2;
    
        echo "<tr>";
            for($b = 1 ; $b <= $blankTd; $b++){
                echo "<td></td>";
            }
            for($j = 1; $j <= $i; $j++) {
                echo "<td>* </td>";
            }   
            for($b = 1 ; $b <= $blankTd; $b++){
                echo "<td></td>";
            }
        echo "</tr>";
        }
    
    echo "</table>";
    ?>
    

    【讨论】:

    • 非常感谢!这帮助很大。看起来不错!我也想问一下,变量和逻辑是怎么形成的?你是怎么想到的? =) 我想更多地了解您的解决方案。 =)
    • 不客气,关于逻辑,我对脚本生成的html做了一些分析,计算出我们需要多少个空白TD。并根据您的整数值(例如 10)和增量值(例如 2)计算出我们需要的总空白 TD。我将它除以 2,因为我们需要将一半的​​空白 TD 放在 * 之后,将一半的空白 TD 放在 * 之后。和你的反向金字塔一样的反向
    • 这真的很有帮助。非常感谢!
    【解决方案2】:

    我使用下面的代码而不使用表格来制作菱形。

    <div style="text-align: center">
    <?php
    $n = 8;
    
    if($n === 1){ die("input must be greater than 1"); }
    
    $nn = ($n * 2);
    $m = (ceil($nn / 2) + 1);
    $temp = 0;
    
    for($x = 1; $x <= $nn; $x++){
        $temp = (($x < $m) ? ($temp + 1) : ($temp - 1));
        $total = ($temp > 1 ? ((2 * $temp) - 1) : $temp);
    
        echo nl2br(str_repeat('* &nbsp;', $total) . "\r\n");
    }
    ?>
    

    【讨论】:

      【解决方案3】:

      我使用了下面的代码。

      <div style="text-align: center">
      <?php
      $n = 8;
      
      if($n === 1){ die("input must be greater than 1"); }
      
      $nn = ($n * 2);
      $m = (ceil($nn / 2) + 1);
      $temp = 0;
      
      for($x = 1; $x <= $nn; $x++){
          $temp = (($x < $m) ? ($temp + 1) : ($temp - 1));
          $total = ($temp > 1 ? ((2 * $temp) - 1) : $temp);
      
          echo nl2br(str_repeat('* &nbsp;', $total) . "\r\n");
      }
      ?>
      

      【讨论】:

        【解决方案4】:
        <?php
            for($i=0;$i<=5;$i++){
                for($j=5;$j>=$i;$j--){
                    echo '&nbsp;';
                }
                for($k=0;$k<=$i;$k++){
                    echo '*';
                }
                echo '<br />';
            }
            for($i=0;$i<=4;$i++){
                for($k=0;$k<=$i+1;$k++){
                    echo '&nbsp;';
                }
                for($j=4;$j>=$i;$j--){
                    echo '*';
                }
                echo '<br />';
            }
        ?>
        

        【讨论】:

        • 这只是钻石的一半。
        猜你喜欢
        • 2022-12-06
        • 1970-01-01
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-25
        • 1970-01-01
        • 2022-06-14
        相关资源
        最近更新 更多